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()#"> 
È stato utile?

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top