Vairāk

Kā izveidot jaunu formas failu no JTS ģeometrijas?


Ko es izmantoju: Java 1.7, JTS 1.13, geotools.api 14

Esmu pabeidzis: Pareizu JTS ģeometriju izveidošana no OSM attiecībām, veidiem un mezgliem.

Ko es vēlos sasniegt: izveidojiet CSV failu, kas satur šādus datus: the_geom, name, postal_code, country, osm_id

"the_geom" jābūt JTS daudzstūra ģeometrijai vai nulles ģeometrijai. (Sūdzas par ESRI specifikāciju)

CSV fails ļauj ērti aizpildīt datus.

Pēc tam, kad šie CSV faili ir pilnībā izveidoti, es vēlos izlasīt šo failu un izveidot no tā failu. Šie atribūti, piemēram, nosaukums, pasta indekss un tā tālāk, ir jāieraksta dbf failā, kas saistīts ar jauno shapefile.

Pēc tam es vēlos importēt jauno formas un dbf failu PostgreSQL.

Nākamais solis, lai izpildītu iepriekš rakstītās prasības: Kā es varu izveidot jaunu formas un dbf failu no jebkuras kolekcijas, kas satur JTS daudzstūra ģeometrijas? Ir iesaistītas daudzas klases, taču neviena no tām nav skaidri paskaidrota vietnē geotools.org, piemēram, faila galvenes izveidošana utt.

Kaut kas kā:

public class Shapefile {public Shapefile (virknes faila nosaukums) {//… izveido nepieciešamo saturu} public void loadFromCSV (virknes faila nosaukums, virknes atdalītājs) {// katrai csv rindai izmantojiet addGeometry ...} public void addGeometry (Geometry g, int esriType, Karte atribūti) {// esriType = 5 daudzstūriem un tā tālāk ... // attributes = atribūti dbf failam. Tāpat kā nosaukums, pasta indekss…} public void write () izmet IOException {// Izraksta izrakstu shapefile un dbf failā ...}}

Es ceru, ka kāds to var izskaidrot.


Tas ir ļoti grūts un ilgstošs veids, kā to izdarīt, jums patiešām vajadzētu izmantot GeoTools datu krātuves (kas abstrahē visu šo darbu)

Tātad, pieņemot, ka tas, ko jūs patiesībā vēlaties, ir uzrakstīt dažas ģeometrijas un atribūtus PostGIS, varat to izdarīt:

Izlemiet, kas atrodas jūsu datu kopā, un pārveidojiet objektus par funkcijām (parasti SimpleFeatures):

Schema SimpleFeatureType = null; mēģiniet {schema = DataUtilities.createType ("", "Atrašanās vieta", "atrašanās vietas: LineString: srid = 4326," + // <- geometry // atribūts: "id: Integer" // skaitļa atribūts // pievienot vēl atribūti šeit, lai tie atbilstu jūsu datu kopai); } catch (SchemaException e) {// TODO Automātiski izveidots uztveršanas bloks e.printStackTrace (); atgriešanās; } SimpleFeatureBuilder featureBuilder = jauns SimpleFeatureBuilder (shēma); // par katru jūsu veikto funkciju: featureBuilder.add (geom); featureBuilder.add (nosaukums); featureBuilder.add (numurs); // + visi pārējie atribūti (iespējams, izmantojiet cilpu) SimpleFeature feature = featureBuilder.buildFeature (null); // ievietojiet tos kolekcijas varoņdarbos un pēc tam pārveidojiet to par FeatureCollection SimpleFeatureCollection kolekciju = new ListFeatureCollection (shpType, feats);

Tagad jums ir nepieciešama PostGIS datu krātuve (vai CSV vai ShapeFile, ja vēlaties):

Karte params = jauns HashMap(); params.put ("dbtype", "postgis"); params.put ("host", "localhost"); params.put ("ports", 5432); params.put ("shēma", "publisks"); params.put ("datu bāze", "datu bāze"); params.put ("lietotājs", "postgres"); params.put ("passwd", "postgres"); DataStore dataStore = DataStoreFinder.getDataStore (parametri); Darījuma transakcija = new DefaultTransaction ("izveidot"); String typeName = dataStore.getTypeNames () [0]; SimpleFeatureSource featureSource = dataStore .getFeatureSource (typeName); if (featureSource instanceof SimpleFeatureStore) {SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource; featureStore.setTransaction (darījums); izmēģiniet {Saraksts ids = featureStore.addFeatures (kolekcija); darījums.saistīt (); } catch (izņēmuma problēma) {problem.printStackTrace (); darījums.atgriešanās (); } beidzot {darījums.slēgt (); } dataStore.dispose (); atgriezties taisnība; }

Piemērs: Rediģējiet formas failu vietā

Šajā piemērā mēs uzzinām, kā rediģēt ESRI shapefiles & # 160 & quot, vietā, tas ir, atstājot datus shapefile un tikai saistot tos projektā, nevis importējot tos projektā.

Lai iekļautos šajā dokumentācijā, ilustrācijās redzams mākslīgi mazs kolektora darbvirsma, tikai labajā pusē piestiprināta tikai ar dažām rūtīm. & # 160 & # 160 Reālajā dzīvē mēs izmantojam daudz lielāku kolektora darbvirsmu, un visas rūtis būtu ieslēgtas, dažas rūtis piestiprinātas pa kreisi, bet citas - pa labi.


Shapefile ģeometrijas un Google Maps iegūšana

Ģeogrāfijai un ģeogrāfiskajiem datiem ir neaizstājama loma lēmumu pieņemšanas informācijas izstrādē un izmantošanā. Gandrīz visi uzņēmējdarbības, demogrāfiskie un ekonomiskie dati attiecas uz atrašanās vietu (-ām) vai teritoriju (-ām).

Tautas skaitīšanas biroja TIGER / Line dati, kas pārsvarā ir pieejami sabiedrībai kā formas faili, ir vienlīdz vai vairāk vērtīgi nekā skaitīšanas biroja demogrāfiski ekonomiskie dati. Šie ģeogrāfiskie dati ir gandrīz visu tiešsaistes karšu pakalpojumu avots. Tautas skaitīšanas birojs katru gadu izlaiž tūkstošiem publiski lietojamu formātu failu, kas atspoguļo mainīgās ģeogrāfiskās un politisko un statistisko robežu izmaiņas un ceļu un zemes virsmas ģeogrāfisko atribūtu izmaiņas. Izmantojiet programmatūru Shp2XML, lai izgūtu shapefile ģeometriju un izvada šos datus XML strukturētā failā.

Shapefile ģeometrija kā XML fails ar Google Maps API
Integrējiet shapefile ģeometriju Google Maps API lietojumprogrammā.

Noklikšķiniet uz grafikas, lai skatītu kā dinamisku Google karti.

Shapefile ģeometrija
Shapefiles formāta failā DBF nav ģeometrijas koordinātu. Ģeometrijas koordinātas (piemēram, virsotņu platums un garums) nav tieši skatāmas vai izvelkamas bez specializētas programmatūras. Daudzām lietojumprogrammām ir nepieciešamas koordinātas, kas ir pieejamas tikai formas failos. Piemēram, XML failu ar koordinātām var izmantot kā līnijas vai marķiera failu ar Bing vai Google maps. Koordinātu sarakstu var apstrādāt ar plašu ģeotelpisko lietojumu palīdzību.

Iegultās formas faila ieguve
Izmantojiet programmatūru Shp2XML, lai izgūtu shapefile ģeometriju un izvada šos datus XML strukturētā failā. Shp2XML ģenerē XML failu (teksta failu), kas satur katras formas koordinātas lietotāja izvēlētajā shapefile (vai formu apakškopu shapefile, ja tiek izmantots vaicājums). Pēc izvēles saglabājiet XML failu XLS formātā.

Izmantojot Shp2XML & # 8212 tautas skaitīšanas trakta robežu eksportēšanas piemērs
Shp2XML sākuma skats ir parādīts šajā grafikā. Kartes skatā Vašingtonā ir redzami 2010. gada skaitīšanas skaitītāji. Skata pamatā ir instalēšanas programmā iekļautais shapefile (cb_2013_11_tract_500k.shp),

Lai atvērtu lielāku skatu, noklikšķiniet uz grafikas
Lietotāja vadīklas un leģendu panelis tiek parādīts kartes skata paneļa kreisajā pusē. Ģenerētais XML fails tiek parādīts kartes skata labajā pusē.

Izmantojot Shp2XML & # 8212 ceļu / līniju segmentu ģeometrijas eksportēšanas piemērs
Nākamajā skatā Vašingtona, DC pēc pasta indeksa apgabala (ZCTA) un visi ceļu / malu formas faili ir parādīti kā slāņi. Skats izmanto shapefile ZCTA shapefile (cb_2013_11_tract_500k.shp) un EDGES shapefile (tl_2010_11_zcta510.shp), kas abi ir iekļauti instalētājā.

Lai atvērtu lielāku skatu, noklikšķiniet uz grafikas
Šis skats tika izstrādāts, veicot šādas darbības:
• Lai atvērtu ZCTA shapefile, izmantojiet File & gtOpen Shapefile.
• Izmantojiet Add Shapefile (poga kreisā paneļa augšpusē), lai pievienotu EDGES shapefile.
• Modificējiet ZCTA slāņa atribūtus, lai iestatītu kā caurspīdīgu / sarkanu robežu ar pasta indeksu kā etiķeti.
• Pievienojiet vaicājumu & # 8220roadflg = & # 8217Y & # 8217 un ZIPL = & # 821720010 & # 8242 & # 8221 (tādējādi tiek eksportēti tikai ceļi, kas atbilst šiem kritērijiem.
• Izmantojot sarakstu lodziņus, atlasiet lauku, kas jāizmanto kā NOSAUKUMS (NOSAUKUMS), un lauku, kas jāizmanto kā KODS (TLID).
• Noklikšķiniet uz pogas Shp2Xml Convert.

Shp2XML instalēšana un izmantošana
Shp2XML 1. līmenis ir pieejams bez maksas ProximityOne lietotāju grupas dalībniekiem (bez maksas, pievienojieties tūlīt).