Utilizzando API OpenMap quale classe si usa per i dati punto estratto del shapefile?
-
03-10-2019 - |
Domanda
Attualmente sto usando classe Shapefile e ColdFusion di passare attraverso i "record" di ogni shapefile. Ogni record ha un rettangolo di selezione e sono in grado di ottenere queste informazioni, ma havent trovato un modo per recuperare effettivamente i punti all'interno di ogni record.
Qualcuno può far luce su quali classi da usare e come usarli?
Questa è esattamente la stessa situazione (tra cui alcuni verbage) come:
http://old.nabble.com/what-class-do-you-use-to-extract-data-from-.SHP-files--td20208204.html
Il solo fatto che sto usando ColdFusion, credo che alcun suggerimento alla soluzione mi avrebbe aiutato molto.
Il mio codice di prova attuale è la seguente:
<cfset shapeFile = createObject("java","com.bbn.openmap.layer.shape.ShapeFile")>
<cfset shapeFile.init('/www/_Dev/tl_2009_25_place.shp')>
<cfoutput>
getFileLength = #shapeFile.getFileLength()#<br>
getFileVersion = #shapeFile.getFileVersion()#<br>
getShapeType = #shapeFile.getShapeType()#<br>
toString = #shapeFile.toString()#<br>
</cfoutput>
<cfdump var="#shapeFile#">
<cfdump var="#shapeFile.getBoundingBox()#"> <br>
<cfdump var="#shapeFile.getNextRecord()#">
Soluzione
Non ho mai usato questo, o fatto qualsiasi GIS, ma dopo aver guardato l'API, ecco il mio suggerimento.
Così, dopo che avete il vostro shapefile, si farebbe:
myESRIRecord = shapeFile.getNextRecord();
Questo si ottiene un ESRIRecord classe o una delle sue sottoclassi, a seconda del tipo di forma è.
Lo shapefile Ho rovinato con conoscere questo numero è:
http://russnelson.com/india.zip
E solo contiene poligono tipi.
L'ESRIPolygonRecord contiene una proprietà chiamata "poligoni", che contiene una serie di istanze com.bbn.openmap.layer.shape.ESRIPoly $ ESRIFloatPoly.
La chiave con questa libreria, a quanto pare, è che un sacco di dati è in proprietà, non accessibile attraverso metodi.
Quindi, come ho detto, le ESRIPolygonRecords ha i suoi dati nella proprietà poligoni, l'ESRIPointRecord ha i suoi dati nella proprietà x e y. Quindi, se state cercando un GetX () o Gety (), questo è il motivo per cui tu non lo trovano.
Questo codice di esempio ha funzionato per me:
<cfset shapeFile = createObject("java","com.bbn.openmap.layer.shape.ShapeFile")>
<cfset shapeFile.init('/tmp/india-12-05.shp')>
<!--- There may be more then one record, so you can repeat this, or loop to get
more records --->
<cfset myRecord = shapeFile.getNextRecord()>
<!--- Get the polygons that make up this record --->
<cfset foo = myRecord.polygons>
<cfdump var="#foo#">
<cfloop array="#foo#" index="thispoly">
<cfoutput>
This poly has #thisPoly.nPoints# points:<br>
<!--- because java arrays are 0 based --->
<cfset loopEnd = thisPoly.nPoints-1>
<cfloop from="0" to="#loopEnd#" index="i">
X: #thisPoly.getX(i)# Y: #thisPoly.getY(i)#<br>
</cfloop>
<!--- Returns points as array --->
<cfdump var="#thisPoly.getDecimalDegrees()#">
<cfdump var="#thisPoly.getRadians()#">
</cfoutput>
</cfloop>