Frage

Ich bin derzeit mit Shape-Datei Klasse und Coldfusion durch die „Aufzeichnungen“ gehen jede Shape-Datei. Jeder Datensatz hat einen Begrenzungsrahmen und ich bin in der Lage, diese Informationen zu erhalten, aber havent einen Weg gefunden, um tatsächlich die Punkte in jedem Datensatz abzurufen.

Kann jemand etwas Licht auf, welche Klassen zu verwenden und wie sie verwendet werden?

Dies ist genau die gleiche Situation (darunter auch einige verbage) als:

http://old.nabble.com/what-class-do-you-use-to-extract-data-from-.SHP-files--td20208204.html

Allthough Ich bin mit Coldfusion, ich glaube, dass alle Hinweise auf die Lösung helfen würde mich sehr.

Mein aktueller Testcode ist wie folgt:

<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()#"> 
War es hilfreich?

Lösung

Ich habe noch nie verwendet oder über GIS getan, aber nach an der API suchen, hier ist mein Vorschlag.

So, nachdem Sie Ihr Shape-Datei haben, würden Sie:

myESRIRecord = shapeFile.getNextRecord();

Diese bekommt man ein ESRIRecord Klasse oder einer ihrer Unterklassen, je nachdem, welche Art von Form ist.

Die Shape-Datei ich mit der Nase habe diese, um herauszufinden, ist:

http://russnelson.com/india.zip

Und nur enthält Polygon Typen.

Die ESRIPolygonRecord enthält eine Eigenschaft „Polygone“ genannt, die eine Reihe von com.bbn.openmap.layer.shape.ESRIPoly $ ESRIFloatPoly Instanzen enthalten.

Der Schlüssel mit dieser Bibliothek, so scheint es, ist, dass ein großer Teil der Daten in Eigenschaften ist, nicht zugänglich durch Methoden.

Also, wie gesagt, die ESRIPolygonRecords seine Daten in der Polygone Eigenschaft hat, hat die ESRIPointRecord seine Daten in der x- und y-Eigenschaften. Also, wenn Sie wurden für eine getX () oder getY () suchen, das ist, warum Sie nicht es finden.

Dieser Beispielcode für mich gearbeitet:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top