Используя OpenMap API, какой класс мне использовать для извлечения точечных данных из шейп-файла? - PullRequest
1 голос
/ 17 сентября 2010

В настоящее время я использую класс Shapefile и ColdFusion для просмотра «записей» каждого шейп-файла.Каждая запись имеет ограничивающий прямоугольник, и я могу получить эту информацию, но не нашел способа на самом деле получить точки внутри каждой записи.

Может ли кто-то пролить свет на то, какие классы использовать и как их использовать?

Это точно такая же ситуация (включая некоторые детали), как:

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

Несмотря на то, что я использую ColdFusion, я верю, что любые подсказки к решению помогут мне очень.

Мой текущий тестовый код выглядит следующим образом:

<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()#"> 

1 Ответ

2 голосов
/ 18 сентября 2010

Я никогда не использовал это и не делал никаких ГИС, но, посмотрев на API, вот мое предложение.

Итак, после того, как у вас есть шейп-файл, вы должны:

myESRIRecord = shapeFile.getNextRecord();

Получается класс ESRIRecord или один из его подклассов, в зависимости от типа фигуры.

Шейп-файл, с которым я столкнулся, чтобы выяснить это:

http://russnelson.com/india.zip

И содержит только полигонов типов.

ESRIPolygonRecord содержит свойство под названием «полигоны», которое содержит массив экземпляров com.bbn.openmap.layer.shape.ESRIPoly $ ESRIFloatPoly.

Кажется, ключ к этой библиотеке в том, что большая часть данных находится в свойствах, недоступных через методы.

Итак, как я уже сказал, ESRIPolygonRecords имеет свои данные в свойстве polygons, а ESRIPointRecord имеет свои данные в свойствах x и y. Итак, если вы искали getX () или getY (), вот почему вы не нашли его.

Этот пример кода работал для меня:

<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>
...