3 votos

¿Por qué mi arcpy.Polygon está cambiando cuántos vértices tiene?

El uso de una secuencia de comandos de Python, estamos tirando una lista de polígono de vértices de un servicio web para construir un polígono y de insertar en nuestro SDE.

El problema de los pasos que se están sucediendo cuando estamos haciendo un arcpy.Polígono geometría objeto de una arcpy.Matriz de arcpy.Punto des. Hay 95 puntos que aparecen en el JSON, 95 puntos en la polygon_array... y luego no 95 puntos en el resultado de arcpy.Polígono.

  • Si es creado con ninguna referencia espacial, el polígono pointCount tiene 11 puntos
  • Si es creado con el WGS84 (que coincide con la lat/long proyección de los datos de origen), el polígono pointCount ha 1126 (!) puntos

¿Por qué el polígono resultante tiene un diferente número de vértices (más o menos) de lo que se entrega? Es posible que misordered vértices que podría causar problemas de geometría para ser "eliminados" por la arcpy.Polígono de la creación de instancias - pero si es así, me siento aún más desconcertados por la WGS84 polígono con más de un millar de puntos!

Código de abajo:

# add points to array
polygon_array = arcpy.Array()
for point in polygon_data:
    polygon_array.add(
        arcpy.Point(
            polygon_data[point]['Value']['Longitude'],
            polygon_data[point]['Value']['Latitude']
        )
    )

# print the length of the array of points
print(polygon_array.count) # prints 95

sr = arcpy.SpatialReference(4326)
polygonObj = arcpy.Polygon(polygon_array, sr)

# Print the amount of points in our polygon
print(polygonObj.pointCount) # prints 1126

(Este se está ejecutando con ArcGIS Desktop 10.2.1.)

4voto

M. B. Altaie Puntos 11

Es siempre un error al no especificar un SpatialReference cuando la creación de una geometría. La razón es que un SpatialReference es requerido, y si usted no proporciona un buen uno, ArcGIS proporcionará un inadecuado .

Uso de Escritorio 10.5.1, el valor predeterminado XY Resolución de 0.0001 unidades, lo que produce un polígono generalizado (con la opción "duplicar" coordenadas eliminado), si es que no falla. Cuando se crea un SpatialReference el uso de un srid de 4326 (GCS_WGS_1984), el valor predeterminado XY cambios de Resolución a 0.000000001 grados (puede haber sido más pequeño de vuelta en 10.2), que es casi siempre una exageración (~= 0,1 milímetros) y a menudo innecesariamente aumenta los requisitos de almacenamiento (tanto como un 80%, vicepresidente SpatialReference.setFalseOriginAndUnits(-400,-400,10000000) ~= 1cm de resolución; su kilometraje puede variar)

En la comparación de los 95 puntos de entrada a las 11 de la salida con el valor predeterminado de referencia espacial, yo esperaría gustaría ver que los valores de las coordenadas que difieren en menos de la polygonObj.spatialReference.XYResolution se eliminan los duplicados.

No es posible determinar por qué más puntos se rellenan una vez que el objeto se convierte en un Polygon geometría sin conocer con exactitud los valores de las coordenadas utilizado. Pero la Polygon objeto a veces pueden trabajar muy duro para forzar un vértice secuencia en un válido polígono, la corrección de las superposiciones y las líneas que se cruzan por la generación de agujeros y piezas adicionales. Yo sugeriría que usted también consulta polygonObj.partCount y/o extracto de la WKT o JSON de la forma resultante.

La obra definitiva sobre cómo SpatialReference opera es la Comprensión de Coordinar la Gestión de la Geodatabase que va en la matemática utilizada en la geometría de los objetos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X