Daha çox

JTS həndəsələrindən yeni bir shapefile necə yaradılır?


Nə istifadə edirəm: Java 1.7, JTS 1.13, geotools.api 14

Bitirdiklərim: OSM münasibətlərindən, yollarından və qovşaqlarından düzgün JTS həndəsələrinin yaradılması.

Nə əldə etmək istəyirəm: Aşağıdakı məlumatları ehtiva edən bir CSV faylı yaradın: the_geom, name, mail_code, country, osm_id

"the_geom" bir JTS çoxbucaqlı həndəsə və ya sıfır həndəsə olmalıdır. (ESRI Spesifikasiyasından şikayətlənir)

CSV faylı məlumatları asanlıqla doldurmağa imkan verir.

Bu CSV faylı tamamilə yaradıldıqdan sonra həmin faylı oxumaq və ondan bir shapefile yaratmaq istəyirəm. Ad, poçt_kodu və s. Kimi xüsusiyyətlər yeni shapefile aid bir dbf sənədinə yazılmalıdır.

Bundan sonra yeni forma və dbf sənədini PostgreSQL-ə idxal etmək istəyirəm.

Yuxarıda yazılmış tələbləri yerinə yetirmək üçün növbəti addım: JTS çoxbucaqlı həndəsələri olan hər hansı bir kolleksiyadan necə yeni bir forma və dbf faylı yaratmaq olar? Bir çox dərs var, lakin heç biri geotools.org-da fayl başlıqları yaratmaq və s. Kimi açıq şəkildə izah olunmur.

Kimi bir şey:

public class Shapefile {public Shapefile (String fayl adı) {// ... lazımlı şeylər yaradır} public void loadFromCSV (String file name, String delimiter) {// CSV-də hər sətir üçün addGeometry istifadə edin ...} public void addGeometry (Geometry g, int esriType, Xəritə atributlar) {// çoxbucaqlar üçün esriType = 5 və s.… // atributlar = dbf faylı üçün atributlar. Ad, poçt_kodu kimi ...} public void write () IOException-u atır {// Formatı və dbf faylına çıxışı yazır ...}}

Ümid edirəm kimsə bunu izah edə bilər.


Bu işin çox çətin və uzun müddətli bir yoludur, həqiqətən GeoTools 'un məlumat deposundan istifadə etməlisiniz (bütün bu işləri mücərrəd edən).

Beləliklə, həqiqətən istədiyiniz şeyin PostGIS-ə bəzi həndəsələr və atributlar yazmaq olduğunu düşünərək bunu edə bilərsiniz:

Datasınızda nə olduğuna qərar verin və obyektlərinizi Xüsusiyyətlərə çevirin (adətən SimpleFeatures):

SimpleFeatureType şeması = boş; cəhd edin {schema = DataUtilities.createType ("", "Yer", "yerlər: LineString: srid = 4326," + // <- həndəsə // atribut: "id: Tamsayı" // bir say atributu // daha çox əlavə et verilənlər bazanıza uyğun gələn atributlar); } tutmaq (SchemaException e) {// TODO Avtomatik olaraq yaradılan tutma bloku e.printStackTrace (); qayıtmaq; } SimpleFeatureBuilder featureBuilder = yeni SimpleFeatureBuilder (şema); // etdiyiniz hər bir xüsusiyyət üçün: featureBuilder.add (geom); xüsusiyyətBuilder.add (ad); featureBuilder.add (nömrə); // + bütün digər atributlar (ehtimal ki, bir döngü istifadə edin) SimpleFeature xüsusiyyət = featureBuilder.buildFeature (null); // bunları kolleksiya xüsusiyyətlərinə qoyun və sonra FeatureCollection SimpleFeatureCollection kolleksiyasına çevirin = yeni ListFeatureCollection (shpType, feats);

İndi bir PostGIS məlumat deposuna ehtiyacınız var (və ya isterseniz CSV və ya ShapeFile):

Xəritə parametrlər = yeni HashMap(); params.put ("dbtype", "postgis"); params.put ("host", "localhost"); params.put ("port", 5432); params.put ("şema", "ictimai"); params.put ("verilənlər bazası", "verilənlər bazası"); params.put ("istifadəçi", "postgres"); params.put ("passwd", "postgres"); DataStore dataStore = DataStoreFinder.getDataStore (params); Əməliyyat əməliyyatı = yeni DefaultTransaction ("yaratmaq"); String typeName = dataStore.getTypeNames () [0]; SimpleFeatureSource featureSource = dataStore .getFeatureSource (typeName); əgər (xüsusiyyətSource instanceof SimpleFeatureStore) {SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource; xüsusiyyətStore.setTransaction (əməliyyat); cəhd edin {Siyahı ids = featureStore.addFeatures (kolleksiya); transaction.commit (); } tutmaq (İstisna problemi) {problem.printStackTrace (); transaction.rollback (); } nəhayət {action.close (); } dataStore.dispose (); doğru qayıt; }

Nümunə: Yerdə bir Shefefile redaktə edin

Bu nümunədə, ESRI shapefiles & # 160 & quotin place, & quot-ni necə düzəldəcəyimizi, yəni məlumatları shapefile qoyub yalnız bir proyektə bağlayaraq proyektə idxal etməməyi öyrəndik.

Bu sənədlərə uyğunlaşmaq üçün illüstrasiyalar süni şəkildə kiçik bir Doldurma masaüstünü göstərir, yalnız bir neçə hissəsi sağ tərəfə yerləşdirilib. & # 160 & # 160 Real həyatda daha böyük bir Doldurma masaüstünü istifadə edirik və bəzi bölmələr sola, digərləri sağa bağlanaraq bütün bölmələr açılacaqdır.


Shapefile Geometry & amp Google Maps çıxarılması

Coğrafiya və coğrafi məlumatlar qərar qəbul etmə məlumatlarının inkişafında və istifadəsində əvəzolunmaz rol oynayır. Demək olar ki, bütün iş, demoqrafik və iqtisadi məlumatlar yer (lər) və ya ərazilərlə əlaqəlidir.

Əhalinin əksəriyyəti şəkilləndirmə şəklində istifadəyə təqdim edilən Sayım Bürosu TIGER / Line məlumatları, Siyahıyaalma Bürosunun demoqrafik-iqtisadi məlumatlarından eyni dərəcədə və ya daha qiymətlidir. Bu coğrafi məlumatlar hazırda mövcud olan demək olar ki, bütün onlayn xəritə xidmətləri üçün mənbəyidir. Siyahıyaalma Bürosu hər il dəyişən coğrafiyanı və siyasi və statistik sərhədlərdəki dəyişiklikləri və yollarda və yerüstü səth coğrafi xüsusiyyətlərini əks etdirən minlərlə ictimai istifadə şəkli yayımlayır. Shakpile həndəsəsini çıxarmaq və bu məlumatları XML quruluşlu fayla çıxarmaq üçün Shp2XML proqramından istifadə edin.

Google Maps API ilə XML Dosyası Olaraq Forma Geometriyası
Google Maps API tətbiqetməsində shapefile həndəsəsini birləşdirin.

Dinamik Google xəritəsi kimi baxmaq üçün qrafikə vurun.

Forma həndəsi
Formalı sənədlər shapefile DBF-də həndəsə koordinatlarını ehtiva etmir. Həndəsə koordinatları (məsələn, zirvələrin enliyi və uzunluğu) xüsusi proqram təminatı olmadan birbaşa görünə və ya çıxarıla bilməz. Bir çox tətbiqetmə yalnız shapefiles-də mövcud olan koordinatlar tələb olunur. Məsələn, koordinatları olan bir XML faylı, Bing və ya Google xəritələri ilə bir çox xətt və ya marker faylı olaraq istifadə edilə bilər. Koordinatlar siyahısı geniş coğrafi tətbiqlər tərəfindən işlənə bilər.

Formalı Geometriyanın çıxarılması
Shakpile həndəsəsini çıxarmaq və bu məlumatları XML quruluşlu fayla çıxarmaq üçün Shp2XML proqramından istifadə edin. Shp2XML seçilmiş istifadəçi şəklindəki hər bir formanın koordinatlarını (və ya bir sorğu tətbiq edildiyi təqdirdə shapefile içindəki şekiller altını) ehtiva edən bir XML faylı (mətn faylı) yaradır. İstəyə görə XML sənədini XLS formatında qeyd edin.

Shp2XML istifadə & # 8212 bir siyahıyaalma traktının sərhədlərini ixrac edən bir nümunə
Shp2XML başlanğıc görünüşü aşağıdakı qrafikdə göstərilir. Xəritə görünüşü, Washington, DC by Census 2010 siyahıyaalma yollarını göstərir. Görünüş quraşdırıcıya daxil edilmiş shapefile (cb_2013_11_tract_500k.shp) əsaslanır,

Daha böyük görünüş üçün qrafikə vurun
İstifadəçi nəzarətləri və əfsanə paneli xəritə görünüşü panelinin solunda göstərilir. Yaradılan XML faylı xəritə görünüşünün sağında göstərilir.

Shp2XML istifadə & # 8212 ixrac yolları / xətt seqmenti həndəsi nümunəsi
Aşağıdakı görünüşdə Washington, DC poçt kodu sahəsi (ZCTA) və bütün yollar / kənarlar qatlar şəklində şəkillər göstərilir. Görünüşdə hər ikisi də quraşdırıcıya daxil edilmiş shapefile ZCTA shapefile (cb_2013_11_tract_500k.shp) və EDGES shapefile (tl_2010_11_zcta510.shp) istifadə olunur.

Daha böyük görünüş üçün qrafikə vurun
Bu baxış aşağıdakı addımlardan istifadə edərək hazırlanmışdır:
• ZCTA shapefile açmaq üçün File & gtOpen Shapefile istifadə edin.
• EDGES shapefile əlavə etmək üçün Forma əlavə et (sol panelin yuxarı hissəsindəki + düyməsini) istifadə edin.
• ZCTA qatının xüsusiyyətlərini etiket kimi poçt kodu ilə şəffaf / qırmızı sərhəd olaraq təyin etmək üçün dəyişdirin.
• & # 8220roadflg = & # 8217Y & # 8217 və ZIPL = & # 821720010 & # 8242 & # 8221 sorğusunu əlavə edin (bu, ixrac ediləcək bu kriteriyalara yalnız cavab verən yollarla nəticələnir.
• Ad (NAME) kimi istifadə ediləcək bir sahə və siyahı qutularından istifadə edərək KOD (TLID) kimi istifadə ediləcək sahəni seçin.
• Shp2Xml Çevirmə düyməsini vurun.

Shp2XML-in quraşdırılması və istifadəsi
Shp2XML Səviyyə 1 ProximityOne İstifadəçi Qrupunun üzvləri üçün pulsuzdur (pulsuzdur, indi qoşulun).


Videoya baxın: How to combine shapefiles in ArcGis (Oktyabr 2021).