El uso de la API OpenMap qué clase lo uso a los datos de punto de extracto del archivo de formas?

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

Pregunta

Actualmente estoy usando la clase Shapefile y ColdFusion que pasar por los "registros" de cada archivo de forma. Cada registro tiene un cuadro delimitador y soy capaz de obtener esta información, pero No se han detectado una manera de recuperar efectivamente los puntos dentro de cada registro.

Puede alguien arrojar algo de luz sobre qué clases de usar y cómo usarlos?

Esta es exactamente la misma situación (incluyendo algunos verbage) como:

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

Acabase estoy usando ColdFusion, yo creo que ninguna pista a la solución me ayudarían en gran medida.

Mi código de prueba actual es la siguiente:

<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()#"> 
¿Fue útil?

Solución

Nunca he utilizado esto, o hacer cualquier SIG, pero después de ver la API, aquí está mi sugerencia.

Así que, después de tener su archivo de forma, lo haría:

myESRIRecord = shapeFile.getNextRecord();

Esto le consigue un ESRIRecord clase o una de sus subclases, dependiendo de qué tipo de forma que es.

El archivo de forma que he metido con de resolver esto es:

http://russnelson.com/india.zip

Y sólo contiene polígono tipos.

El ESRIPolygonRecord contiene una propiedad llamada "polígonos", que contiene un conjunto de instancias de com.bbn.openmap.layer.shape.ESRIPoly $ ESRIFloatPoly.

La clave con esta biblioteca, al parecer, es que muchos de los datos están en propiedades, no se puede acceder a través de métodos.

Así que, como he dicho, los ESRIPolygonRecords tiene sus datos en la propiedad polígonos, el ESRIPointRecord tiene sus datos en la propiedades x e y. Por lo tanto, si estabas buscando un getX () o getY (), es por eso que no lo encontraron.

Este código de ejemplo que funcionó para mí:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top