Utilisation de l'API de OpenMap quelle classe dois-je utiliser les données de point d'extrait du fichier de forme?

StackOverflow https://stackoverflow.com/questions/3737861

Question

Je suis actuellement en utilisant la classe Shapefile et ColdFusion passer par les « dossiers » de chaque shapefile. Chaque enregistrement a un cadre de sélection et je suis en mesure d'obtenir ces informations, mais havent a trouvé un moyen de récupérer effectivement les points à l'intérieur de chaque enregistrement.

Quelqu'un peut-il faire la lumière sur les classes à utiliser et comment les utiliser?

Ceci est exactement la même situation (y compris certains verbage) comme:

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

Allthough J'utilise ColdFusion, je crois que toutes les allusions à la solution me aiderait grandement.

Mon code de test en cours est la suivante:

<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()#"> 
Était-ce utile?

La solution

Je ne l'ai jamais utilisé cela, ou fait tout SIG, mais après avoir regardé l'API, voici ma suggestion.

Alors, une fois que vous avez votre shapefile, vous devez:

myESRIRecord = shapeFile.getNextRecord();

Cela vous obtient ESRIRecord classe ou un de ses sous-classes, en fonction de ce type de forme il est.

Le shapefile que j'ai foiré avec pour comprendre cela est:

http://russnelson.com/india.zip

Et que contient polygone types.

Le ESRIPolygonRecord contient une propriété appelée "polygones" qui contient un tableau d'instances com.bbn.openmap.layer.shape.ESRIPoly $ ESRIFloatPoly.

La clé de cette bibliothèque, il semble, est que beaucoup de données dans les propriétés, non accessibles par des méthodes.

Alors, comme je l'ai dit, les ESRIPolygonRecords a ses données dans la propriété des polygones, l'ESRIPointRecord a ses données dans les propriétés x et y. Donc, si vous cherchez un getX () ou getY (), c'est pourquoi vous ne pas le trouver.

Ce code échantillon a fonctionné pour moi:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top