Más

Orden de los vértices de los polígonos en SIG general: en sentido horario o antihorario


Hace dos días hice una pregunta sobre el orden de almacenamiento interno de los vértices de un polígono en los shapefiles de ESRI. Esa pregunta fue respondida (¿Los polígonos se almacenan en el sentido de las agujas del reloj o en sentido contrario a las agujas del reloj en un archivo de formas?) Y también se respondió en una publicación anterior (Creación de polígonos (rotación en el sentido de las agujas del reloj o no))

Pero ahora mi pregunta es más general y no sé si tiene una respuesta única.

¿El orden en el sentido de las agujas del reloj es solo para shapefiles ESRI o para formatos GIS generales?

¿Y qué hay de la representación interna de un software GIS?

Por ejemplo, si uso QGIS y leo un * .shp que contiene polígonos, supongo que la representación interna del límite exterior es en el sentido de las agujas del reloj como en el shapefile original, pero ¿qué pasa con todos los formatos de archivo compatibles con QGIS?

¿Y para ArcGIS?

Y en el caso de que exista un formato de archivo con polígonos almacenados en sentido antihorario, si estos archivos se cargan en QGIS, ArcGIS, etc., se cambia la orientación internamente, entonces si leo los datos usando PyQGIS, por ejemplo, los polígonos son en sentido horario ¿ordenado?

Mi propósito es escribir un complemento para QGIS, pero la fuente de datos pueden ser archivos de forma ESRI u otros formatos. Como necesito verificar los ángulos entre lados consecutivos de polígonos usando sus azimuts, necesito saber si el orden es en el sentido de las agujas del reloj. Una solución es calcular el área de cada polígono y, si mal no recuerdo, si es positivo, el orden es en el sentido de las agujas del reloj y si es negativo, el orden es en el sentido contrario.

El cálculo de áreas no es una tarea intensiva, por lo que no ralentizará tanto mi complemento.

Pero en el caso especial de QGIS, ¿alguien sabe si almacena los polígonos en sentido horario o antihorario, independientemente del orden en la fuente original?

Ahora estoy trabajando con shapefiles ESRI y las coordenadas enlayer.getFeatures (). geometry (). asPolygon ()se almacenan en el sentido de las agujas del reloj para el borde exterior y en el sentido contrario a las agujas del reloj para los agujeros, i. mi. como en el * .shp original.


En la especificación OGC, que se puede descargar [aquí], (http://www.opengeospatial.org/standards/sfs) dicen:

"La rotación del polígono no está definida por este estándar; la rotación real del polígono puede ser en sentido horario o antihorario".

En los documentos de Oracle, se establece claramente que los límites del anillo exterior están orientados en sentido antihorario y los límites del anillo interior, en sentido horario. Del mismo modo, en SQL Server Spatial, el tipo de datos geográficos sigue una regla en sentido antihorario para el anillo exterior y en el sentido de las agujas del reloj para los anillos interiores; consulte este blog de MicroSoft para obtener más detalles. Postgis parece permitirlo de cualquier manera, para geometrías, y tiene funciones que obligarán a la geometría de un polígono a seguir una regla de la mano derecha o izquierda, consulte ST_ForceRHR y ForceLHR. JTS / Geos parece haber seguido la regla de la mano derecha, es decir, una orientación del anillo exterior en el sentido de las agujas del reloj, por lo que en realidad no está nada claro.

En general, tiene sentido que un tipo de datos geográficos fuerce la orientación, ya que de lo contrario sería imposible saber si un pequeño polígono es solo eso o el anillo interior de un polígono mundial completo. Con un tipo de datos de geometría en una superficie plana, esta confusión no puede surgir, ya que el anillo exterior y el anillo interior siguen en orden, y si solo hay un anillo único, será envolvente (sin importar la orientación), a diferencia de un globo , que envuelve.


De un comentario de @mxfh: El acceso a características simples de OpenGIS de OGC (ISO 19125-1) especifica una dirección en sentido antihorario para los anillos exteriores a partir del documento de la versión 1.2.1 [OGC 06-103r4] 6.1.11.1/página 26 de opengeospatial.org / estándares / sfa. El cambio se introdujo entre la versión 1.1.0 y 1.2.0 en 2006 más reciente. La nota a pie de página que está citando no se ha actualizado desde 2005


Las direcciones del anillo (límite) son necesarias para evitar ambigüedades en los sistemas de coordenadas geográficas que cubren una superficie finita, ya que el límite definiría dos áreas, una a la izquierda y otra a la derecha del límite a lo largo de su dirección. Es posible determinar cuál de esas dos áreas es la más grande, pero aún deja la ambigüedad.

Aquí hay una descripción general de las direcciones del anillo exterior de los polígonos en varios formatos según sus especificaciones:

  • El acceso a funciones simples (ISO 19125-1) también se utiliza en WKT / GML / KML y en varias implementaciones de SQL:

    • anillos exteriores: en sentido antihorario
    • anillos interiores (agujeros): sentido horario.

    Un polígono es una superficie plana definida por 1 límite exterior y 0 o más límites interiores. Cada límite interior define un agujero en el polígono. […]

    El límite exterior LinearRing define la "parte superior" de la superficie, que es el lado de la superficie desde el cual el exterior El límite parece atravesar el límite en un en sentido anti-horario dirección. La interior LinearRings tendrá la orientación opuesta y aparecerá como agujas del reloj cuando se ve desde la "parte superior" ... Especificaciones de acceso a funciones simples

    En la mayoría de las implementaciones, el orden de los anillos en un POLYGON es importante (a diferencia de los shapefiles)

    Para un polígono con huecos, su primer subelemento es su anillo exterior, su segundo subelemento es su primer anillo interior, su tercer subelemento es su segundo anillo interior, y así sucesivamente. Oracle espacial

    Los anidamientos más profundos, también conocidos como isla-en-un-lago-en-una-isla-… deben representarse como MultiPolygons (ver figura 2.10 (4)), ya que solo puede haber un borde exterior y anidamientos más profundos que los anillos interiores definido.

  • Archivos de forma ESRI / SHP:

    • anillos exteriores: en sentido horario
    • anillos interiores: en sentido antihorario

    Un polígono consta de uno o más anillos. Un anillo es una secuencia conectada de cuatro o más puntos que forman un bucle cerrado que no se interseca. Un polígono puede contener múltiples anillos exteriores. El orden de los vértices o la orientación de un anillo indica qué lado del anillo es el interior del polígono. La vecindad a la derecha de un observador que camina a lo largo del anillo en orden de vértice es la vecindad dentro del polígono. Vértices de anillos que definen agujeros en polígonos están en un en sentido anti-horario dirección. Los vértices de un único polígono anillado están, por lo tanto, siempre en agujas del reloj pedido. […]

    El orden de los anillos en la matriz de puntos no es significativo. Informe técnico de ESRI

    Dado que se permiten múltiples límites exteriores, las configuraciones de isla en un lago en una isla son posibles con esta definición de polígono. Topológicamente, la isla en un lago sería simplemente otro anillo exterior en el sentido de las agujas del reloj. Efectivamente, esto hace que un polígono ESRI Shapefile sea un MultiPolygon de características simples

    Si no ordena los puntos correctamente, solo tendrá polígonos superpuestos. pyshp

  • GeoJSON (RFC7946):

    NOTA: Las especificaciones originales de GeoJSON 2008 no tenían ningún orden de bobinado aplicado.

    • orden de bobinado: el anillo exterior es en sentido antihorario (regla de la mano derecha)
    • los anillos interiores están en el sentido de las agujas del reloj
    • el orden de los anillos es importante:

      Para polígonos con múltiples anillos, el primero debe ser el anillo exterior y los demás deben ser anillos o agujeros interiores. Especificaciones de GeoJSON

  • TopoJSON: fuerza los anillos exteriores en el sentido de las agujas del reloj de forma predeterminada

Excursión:

El razonamiento matemático de por qué se alternan los órdenes de enrollamiento de los anillos anidados es que al calcular el área con la fórmula de los cordones de los zapatos (explicación visual) se calculan las áreas con signo según la dirección del anillo.

En general, los anillos anidados (límites interiores) se consideran agujeros y tienen la dirección alternativa del anillo exterior. Su valor de área con signo de contribución es negativo. Donde los anillos exteriores son positivos. El área total de todas las entidades del anillo es la suma de todas las áreas firmadas.

Según lo implementado por ESRI, consulte esta entrada de la base de conocimientos: ¿Qué algoritmo utiliza ArcGIS para determinar el área de un polígono?

Mnemónico propuesto

Extremos abiertos de formas de letras interpretadas como flechas:

  • Shapefile: S → ᔑ → ↻
  • Simple Fmiaturmis: e → ᘓ (enrollado hacia afuera en sentido antihorario) → ↺
  • GeoJSON: G (la raíz de G es flecha) → ↺

No sé si nadie podrá dar una respuesta definitiva a su pregunta, ya que cada formato de archivo vectorial es diferente y cada SIG, en términos de cómo manejan internamente estos datos, también será diferente. Pero puedo decirle con certeza que el orden en el sentido de las agujas del reloj no es solo para ESRI Shapefiles. Hay otros formatos que usan una designación similar de ordenamiento en el sentido de las agujas del reloj para los anillos externos y en el sentido contrario a las agujas del reloj para los polígonos de orificios interiores. Por ejemplo, la estructura poligonal del vector JTS utiliza un formato similar. De hecho, se afirma aquí que históricamente esto iba a ser similar al enfoque de ESRI. También puedo decir definitivamente que no, no todos los formatos tienen este requisito. Por ejemplo, las especificaciones del formato GeoJSON no establecen tal requisito sobre el orden de los vértices en su formato poligonal. La especificación KML en realidad dice:

Los polígonos para deben especificarse en sentido contrario a las agujas del reloj. Los polígonos siguen la "regla de la mano derecha", que establece que si coloca los dedos de la mano derecha en la dirección en la que se especifican las coordenadas, el pulgar apunta en la dirección general de la normal geométrica del polígono.

Por lo tanto, existe y se implementan todas las opciones. ¡Es un mundo salvaje!


Malla poligonal


A malla poligonal o cuadrícula no estructurada es una colección de vértices, aristas y caras que define la forma de un objeto poliédrico en gráficos 3D por computadora y modelado de sólidos. Las caras suelen constar de triángulos, cuadriláteros u otros polígonos convexos simples, ya que esto simplifica el renderizado, pero también pueden estar compuestos por polígonos cóncavos más generales o polígonos con huecos.

El estudio de mallas poligonales es un gran subcampo de los gráficos por ordenador y el modelado geométrico. Se utilizan diferentes representaciones de mallas poligonales para diferentes aplicaciones y objetivos. La variedad de operaciones realizadas en mallas puede incluir lógica booleana, suavizado, simplificación y muchas otras. Las representaciones de red, mallas "de flujo continuo" y "progresivas", se utilizan para transmitir mallas poligonales a través de una red. Las mallas volumétricas son distintas de las mallas poligonales en que representan explícitamente tanto la superficie como el volumen de una estructura, mientras que las mallas poligonales solo representan explícitamente la superficie (el volumen es implícito). Dado que las mallas poligonales se utilizan ampliamente en gráficos por computadora, también existen algoritmos para el trazado de rayos, la detección de colisiones y la dinámica de cuerpos rígidos de las mallas poligonales.


Contenido

Numero de lados

Los polígonos se clasifican principalmente por el número de lados, consulte la sección de nombres de polígonos a continuación.

Convexidad

Los polígonos pueden caracterizarse por su grado de convexidad:

  • Convexo: cualquier línea trazada a través del polígono (y no tangente a un borde o esquina) se encuentra con su límite exactamente dos veces.
  • No convexo: se puede encontrar una línea que coincide con su límite más de dos veces.
  • Sencillo: el límite del polígono no se cruza. Todos los polígonos convexos son simples.
  • Cóncavo: No convexo y simple.
  • En forma de estrella: todo el interior es visible desde un solo punto, sin cruzar ningún borde. El polígono debe ser simple y puede ser convexo o cóncavo.
  • Auto intersección: el límite del polígono se cruza a sí mismo. Branko Grünbaum los llama copto, aunque este término no parece ser de uso generalizado. El termino complejo a veces se usa en contraste con sencillo, pero esto corre el riesgo de confusión con la idea de un polígono complejo como uno que existe en el plano complejo de Hilbert que consta de dos dimensiones complejas.
  • Polígono estrella: un polígono que se interseca a sí mismo de forma regular.

Simetría

  • Equiángulo: todos sus ángulos de esquina son iguales.
  • Cíclico: todas las esquinas se encuentran en un solo círculo.
  • Isogonal o vértice-transitivo: todas las esquinas se encuentran dentro de la misma órbita de simetría. El polígono también es cíclico y equiangular.
  • Equilátero: todos los bordes tienen la misma longitud. (Un polígono con 5 o más lados puede ser equilátero sin ser convexo.) (Williams 1979, págs. 31-32)
  • Isotoxal o borde transitivo: todos los lados se encuentran dentro de la misma órbita de simetría. El polígono también es equilátero.
  • Regular. Un polígono es regular si es a la vez cíclico y equilátero. Un polígono regular no convexo se llama polígono estrella regular.

Diverso

  • Rectilíneo: un polígono cuyos lados se encuentran en ángulos rectos, es decir, todos sus ángulos interiores son 90 o 270 grados.
  • Monótono con respecto a una línea dada L, si cada línea ortogonal a L interseca el polígono no más de dos veces.

Algunos de los métodos sugeridos fallarán en el caso de un polígono no convexo, como una media luna. Aquí hay uno simple que funcionará con polígonos no convexos (incluso funcionará con un polígono que se interseca a sí mismo como una figura de ocho, diciéndote si es principalmente agujas del reloj).

Suma sobre los bordes, (x2 - x1) (y2 + y1). Si el resultado es positivo, la curva es en el sentido de las agujas del reloj, si es negativo, la curva es en sentido antihorario. (El resultado es el doble del área encerrada, con una convención +/-).

Voy a arrojar otra solución porque es sencilla y no matemáticamente intensiva, solo usa álgebra básica. Calcula el área con signo del polígono. Si es negativo, los puntos están en el sentido de las agujas del reloj, si es positivo, están en el sentido contrario a las agujas del reloj. (Esto es muy similar a la solución de Beta).

Tenga en cuenta que si solo está comprobando el pedido, no necesita molestarse en dividir por 2.

Encuentra el vértice con la y más pequeña (y la x más grande si hay empates). Sea el vértice A y el vértice anterior de la lista sea B y el siguiente vértice de la lista sea C. Ahora calcule el firmar del producto cruzado de AB y AC.

El producto cruzado mide el grado de perpendicularidad de dos vectores. Imagina que cada borde de tu polígono es un vector en el plano x-y de un espacio xyz tridimensional (3-D). Entonces, el producto cruzado de dos aristas sucesivas es un vector en la dirección z (dirección z positiva si el segundo segmento es en el sentido de las agujas del reloj, menos la dirección z si es en el sentido contrario a las agujas del reloj). La magnitud de este vector es proporcional al seno del ángulo entre los dos bordes originales, por lo que alcanza un máximo cuando son perpendiculares y se estrecha para desaparecer cuando los bordes son colineales (paralelos).

Entonces, para cada vértice (punto) del polígono, calcule la magnitud del producto cruzado de los dos bordes contiguos:

Así que etiquete los bordes consecutivamente como
edgeA es el segmento desde el punto0 al punto1 y
edgeB entre el punto1 al punto2
.
edgeE está entre point4 y point0.

Entonces el vértice A (punto0) está entre
edgeE [Desde el punto 4 al punto 0]
edgeA [Desde el punto0 al `punto1 '

Estos dos bordes son en sí mismos vectores, cuyas coordenadas xey se pueden determinar restando las coordenadas de sus puntos inicial y final:

edgeE = point0 - point4 = (1, 0) - (5, 0) = (-4, 0) y
edgeA = point1 - point0 = (6, 4) - (1, 0) = (5, 4) y

Y el producto cruzado de estos dos bordes contiguos se calcula utilizando el determinante de la siguiente matriz, que se construye poniendo las coordenadas de los dos vectores debajo de los símbolos que representan los tres ejes de coordenadas (i, j, & amp k). La tercera coordenada con valor (cero) está ahí porque el concepto de producto cruzado es una construcción 3-D, por lo que extendemos estos vectores 2-D a 3-D para aplicar el producto cruzado:

Dado que todos los productos cruzados producen un vector perpendicular al plano de dos vectores que se multiplican, el determinante de la matriz anterior solo tiene un componente k (o eje z).
La fórmula para calcular la magnitud del componente del eje k o z es
a1 * b2 - a2 * b1 = -4 * 4-0 * 1 = -16

La magnitud de este valor (-16), es una medida del seno del ángulo entre los 2 vectores originales, multiplicado por el producto de las magnitudes de los 2 vectores.
En realidad, otra fórmula para su valor es
A X B (producto cruzado) = | A | * | B | * pecado (AB).

Entonces, para volver a una medida del ángulo, necesita dividir este valor, (-16), por el producto de las magnitudes de los dos vectores.

Entonces la medida de sin (AB) = -16 / 16.4924 = -.97014.

Esta es una medida de si el siguiente segmento después del vértice se ha doblado hacia la izquierda o hacia la derecha, y cuánto. No es necesario tomar arco sinusoidal. ¡Lo único que nos importa es su magnitud y, por supuesto, su signo (positivo o negativo)!

Haga esto para cada uno de los otros 4 puntos alrededor del camino cerrado y sume los valores de este cálculo en cada vértice.

Si la suma final es positiva, fue en sentido horario, negativo, antihorario.


No hay forma de inferir automáticamente el orden de enrollamiento de una malla 3D que funcionará para cada entrada posible.

Por ejemplo, si le doy el triángulo (0, 0, 0), (1, 0, 0), (0, 1, 0) solo sin otro contexto, no sabe si está destinado a ser un contador de bobinado -en el sentido de las agujas del reloj (de modo que el frente mire hacia afuera a lo largo del eje z) o en el sentido de las agujas del reloj (de modo que su frente mire hacia afuera a lo largo del eje z +) (Suponiendo un sistema de coordenadas para zurdos, pero el sistema de coordenadas también podría ser para diestros, volteando todo)

Ambas serían interpretaciones válidas, y deberías preguntarle al creador o usar algún conocimiento sobre el formato de la malla o lo que debe representar para determinar qué versión está destinada.

Pero hay un caso especial común en el que podemos inferir el revestimiento correcto con mayor confianza: si sus mallas representan objetos sólidos y tiene una geometría múltiple hermética. (Esto significa que la malla forma una superficie continua sin agujeros, espacios, bordes sueltos o aletas de un solo lado)

Si tiene una malla de este tipo, puede adivinar su devanado, luego verifique si esa suposición tiene sentido al ver si coloca la cara frontal de cada polígono mirando "hacia afuera" del sólido en lugar de hacia adentro. (Pero tenga en cuenta: hay casos raros en los que hacemos mallas que se han volteado deliberadamente para obtener varios efectos, ¡por lo que incluso esta prueba no es infalible!)

Elija un triángulo / polígono arbitrariamente

Construya la normal de ese polígono de acuerdo con su sinuoso adivinado

Lanza un rayo a través de un punto en ese polígono, en la dirección opuesta a su normal. Pruebe este rayo contra todos los demás polígonos de la malla (esto puede resultar costoso)

Si obtiene un número impar de aciertos (golpear la parte posterior de otro polígono, luego posiblemente el frente de otro y luego la parte posterior de otro, o cualquier número de pares de adelante y atrás), entonces su conjetura sinuosa parece correcta. Este es el patrón que esperaríamos ver al disparar en una forma sólida.

Si obtienes un número par de aciertos, entonces tu conjetura de bobinado probablemente fue incorrecta, y deberías usar el bobinado opuesto en su lugar.

Puede ejecutar esta prueba para varios polígonos de muestra diferentes en su malla para generar consenso y tratar de eliminar los valores atípicos debido a la geometría no múltiple, como las aletas de las hojas de un solo lado.

Sin embargo, como puede ver, es mucho más trabajo y tiene menos garantías que simplemente inspeccionar su formato de fuente de geometría para determinar qué devanado es estándar para ese tipo, o preguntarle a quien hizo la malla.

(Originalmente omití este caso porque dijiste que querías generar normales y no mencionaste que los tenías disponibles como entrada. Pero para completar).

Si su malla tiene vectores normales, luego puede usarlos como la verdad básica para la dirección frontal prevista (siempre que el creador del modelo no esté haciendo nada demasiado extraño con las normales ajustadas manualmente).

Digamos que tienes un triángulo con puntos (en orden) a, b, c

Calcule la normal esperada de su triángulo tomando el producto cruzado:

Ahora compare eso con las normales que vinieron con su malla (si su malla tiene normales definidas por vértice, puede promediar las tres normales de vértice de un triángulo para obtener una normal de triángulo. O puede promediar todos los valores normales esperados para los triángulos que bordean un determinado vértice para obtener un vértice normal en su lugar)

Si coincide & gt 0, entonces su malla se enrolla en sentido antihorario cuando se mira contra su normal en un sistema de coordenadas para diestros, o en el sentido de las agujas del reloj si está en un sistema de coordenadas para zurdos. Si coincide & lt 0, entonces la malla se enrolla en el sentido de las agujas del reloj en un sistema de coordenadas para diestros, o en sentido antihorario si está en un sistema de coordenadas para zurdos. Si el acuerdo es cero, entonces la prueba no es concluyente para este triángulo (alguien hizo que las normales de entrada estuvieran cerca de cero o casi paralelas a la superficie por alguna razón), y puede volver a intentarlo con una parte diferente de la malla.


AsSVG ¶

Acepta un solo campo geográfico o expresión y devuelve una representación de gráficos vectoriales escalables (SVG) de la geometría.

Argumento de palabra clave Descripción
relativo Si se establece en Verdadero, los datos de la ruta se implementarán en términos de movimientos relativos. El valor predeterminado es Falso, lo que significa que en su lugar se utilizan movimientos absolutos.
precisión Esta palabra clave se puede utilizar para especificar el número de dígitos significativos para las coordenadas en la representación SVG; el valor predeterminado es 8.


3 respuestas 3

Tu pregunta no es lo suficientemente precisa. Una matriz de puntos es sólo «en sentido horario» o «antihorario» en relación con un punto de referencia. De lo contrario, cualquier matriz de tres puntos siempre puede ser CW o CCW. Vea la siguiente imagen: a la izquierda, los puntos están ordenados en el sentido de las agujas del reloj a la derecha, exactamente los mismos puntos están ordenados en el sentido contrario a las agujas del reloj.

En su caso, creo que utilizar el baricentro de los puntos como punto de referencia es razonable.

Un buen método para un número desconocido de puntos podría ser el siguiente:

  • sea ​​P [0], P [1],. P [n-1] es la lista de puntos para ordenar
  • sea ​​M el baricentro de todos los puntos
  • calcular a [0], a [1],. a [n-1] tal que a [i] = atan2 (P [i] .y - M.y, P [i] .x - M.x)
  • ordenar puntos en relación con su valor a, usando qsort, por ejemplo.

Sin embargo, puede estar seguro de que un buen algoritmo de clasificación funcionará mal con tres valores de entrada en comparación con un método ad-hoc. El uso de atan2 sigue siendo válido, pero no use qsort.

Creo que lo que realmente estás preguntando aquí es el orden de enrollamiento del triángulo, que en realidad es bastante simple de probar.

Dado que solo hay tres puntos en su triángulo, su triángulo ya está en el orden de las agujas del reloj o en el sentido contrario a las agujas del reloj, por lo que todo lo que necesita hacer es verificar cuál de esos dos es e invertir el orden de los índices si el devanado no es el que quieres.

Aquí está la idea general, asumiendo que los tres vértices de un triángulo son a, B, y C, y que tiene una operación simple de resta de vectores:

Tenga en cuenta que, según la forma en que haya orientado su eje + y (hacia arriba o hacia abajo), los casos "en el sentido de las agujas del reloj" y "en el sentido contrario a las agujas del reloj" pueden invertirse de cómo los he etiquetado en los comentarios de este código de muestra.

¿Puedes dar más información? Quiere un orden de puntos CCW, pero ¿qué punto debería ser el centro del orden?

Si solo tiene un triángulo (3 puntos) en el plano, puede calcular el determinante a partir de la matriz, donde las líneas son coordenadas de puntos (la tercera coordenada es 1). Si el determinante es> 0, los puntos están en orden antihorario. De lo contrario, puede cambiar, por ejemplo, los dos últimos puntos y obtendrá el pedido CCW.

Si tiene los puntos A, B, C, entonces su matriz se ve así:

El determinante es: xA * yB + xB * yC + xC * yA - yB * xC - yC * xA - yA * xB. Entonces puedes compararlo con cero. Si es> 0, devuelve los puntos A, B, C; si no lo es, devuelve A, C, B.

Si tiene un conjunto de puntos y sabe que hacen un polígono convexo (todos son parte de un casco convexo) y desea obtener su orden, puede usar Graham Scan o Jarvis's March (estos son algoritmos para encontrar un casco convexo desde muchos puntos, pero también debería funcionar aquí :))


Sintaxis

El ráster de entrada del que se extraerán las celdas.

Un polígono (o polígonos) que define el área del ráster de entrada que se extraerá.

Cada parte de polígono es una lista de vértices definidos por clases de puntos. Los puntos se especifican como pares de coordenadas x, y en las mismas unidades de mapa que el ráster de entrada.

La forma del objeto para un solo polígono es la siguiente:

Opcionalmente, se puede especificar un grupo de múltiples polígonos usando una clase Polygon para definir una lista de partes de polígono. Tenga en cuenta que para hacer esto, todas las partes deben ser contiguas y, por lo tanto, estar rodeadas por una única forma de perímetro. La forma del objeto en este caso estaría en una lista contigua de la siguiente manera:

En todos los casos, la última coordenada de cada parte del polígono debe ser la misma que la primera para cerrarla.

Identifica si extraer celdas dentro o fuera del polígono de entrada.

  • INSIDE: una palabra clave que especifica que solo las celdas dentro del polígono de entrada deben seleccionarse y escribirse en el ráster de salida. Todas las celdas fuera del polígono recibirán valores NoData en el ráster de salida.
  • FUERA: una palabra clave que especifica que las celdas fuera del polígono de entrada deben seleccionarse y escribirse en el ráster de salida. Todas las celdas dentro del polígono recibirán NoData.

Valor devuelto

El ráster de salida que contiene los valores de celda extraídos del ráster de entrada.


Sintaxis

El ráster de entrada del que se extraerán las celdas.

Un polígono (o polígonos) que define el área del ráster de entrada que se extraerá.

Cada parte de polígono es una lista de vértices definidos por clases de puntos. Opcionalmente, se puede usar una clase de polígono para definir una lista de partes de polígono.

Los puntos se especifican como pares de coordenadas x, y en las mismas unidades de mapa que el ráster de entrada. La forma del objeto es:

Tenga en cuenta que la última coordenada debe ser la misma que la primera para cerrar un polígono.

Identifica si extraer celdas dentro o fuera del polígono de entrada.

  • INSIDE: una palabra clave que especifica que las celdas dentro del polígono de entrada deben seleccionarse y escribirse en el ráster de salida. Todas las celdas fuera del polígono recibirán valores NoData en el ráster de salida.
  • FUERA: una palabra clave que especifica que las celdas fuera del polígono de entrada deben seleccionarse y escribirse en el ráster de salida. Todas las celdas dentro del polígono recibirán valores NoData en el ráster de salida.

Valor devuelto

El ráster de salida que contiene los valores de celda extraídos del ráster de entrada.


API de ArcGIS para JavaScript 3.36

Un motor de geometría del lado del cliente. Si se requiere más de una geometría para cualquiera de los métodos siguientes, todas las geometrías deben tener la misma referencia espacial para que el método funcione como se esperaba. Consulte el método de unión para ver un ejemplo de código.

Limitación conocida: Esta clase solo es compatible con la sintaxis de codificación estilo AMD.

Muestras

Métodos

NombreTipo de retornoResumen
buffer (geometría, distancia, unidad, unionResults?) Polígono | Polígono[] Crea polígonos de zona de influencia planos (o euclidianos) a una distancia especificada alrededor de las geometrías de entrada.
clip (geometría, envolvente) Geometría Calcula la geometría recortada a partir de una geometría de destino mediante una envolvente.
contiene (containerGeometry, insideGeometry) Booleano Indica si una geometría contiene otra geometría.
convexHull (geometría, fusionar?) Geometría | Geometría[] Calcula el casco convexo de la geometría de entrada.
cruces (geometría1, geometría2) Booleano Indica si una geometría se cruza con otra geometría.
corte (geometría, cortador) Geometría[] Divida la polilínea o polígono de entrada donde cruza una polilínea de corte.
densificar (geometría, maxSegmentLength, maxSegmentLengthUnit) Geometría Densifique geometrías trazando puntos entre vértices existentes.
diferencia (inputGeometry, subtractor) Geometría | Geometría[] Crea la diferencia de dos geometrías.
disjoint (geometría1, geometría2) Booleano Indica si una geometría está disjunta (no se cruza de ninguna manera) con otra geometría.
distancia (geometría1, geometría2, unidad de distancia) Número Calcula la distancia plana más corta entre dos geometrías.
es igual a (geometría1, geometría2) Booleano Indica si dos geometrías son iguales.
ExtendedSpatialReferenceInfo (SpacialReference) Objeto Devuelve un objeto que contiene información adicional sobre la referencia espacial de entrada.
flipHorizontal (geometría, flipOrigin?) Geometría Invierte una geometría en el eje horizontal.
flipVertical (geometría, flipOrigin?) Geometría Invierte una geometría en el eje vertical.
generalizar (geometría, maxDeviation, removeDegenerateParts ?, maxDeviationUnit?) Geometría Realiza la operación de generalizar sobre las geometrías del cursor.
geodesicArea (geometría, unidad) Número Calcula el área de la geometría de entrada.
geodesicBuffer (geometría, distancia, unidad, unionResults?) Polígono | Polígono[] Crea polígonos de zona de influencia geodésicos a una distancia especificada alrededor de las geometrías de entrada.
geodesicDensify (geometría, maxSegmentLength, maxSegmentLengthUnit?) Geometría Devuelve una versión densificada geodésicamente de la geometría de entrada.
geodesicLength (geometría, unidad) Número Calcula la longitud de la geometría de entrada.
intersect (geometría, intersector) Geometría | Geometría[] Crea una nueva geometría a través de la intersección entre dos geometrías.
intersecta (geometría1, geometría2) Booleano Indica si una geometría se cruza con otra geometría.
isSimple (geometría) Booleano Indica si la geometría dada es topológicamente simple.
cercanaCoordinada (geometría, inputPoint) Objeto Encuentra la coordenada de la geometría más cercana al punto especificado.
más cercanoVertex (geometría, inputPoint) Objeto Encuentra el vértice en la geometría más cercana al punto especificado.
cercanasVertices (geometría, inputPoint, searchRadius, maxVertexCountToReturn) Objeto[] Encuentra todos los vértices en la distancia dada desde el punto especificado, ordenados desde el más cercano al más lejano y los devuelve como una matriz de objetos.
offset (geometría, offsetDistance, offsetUnit, joinType, bevelRatio ?, flattenError?) Geometría | Geometría[] La operación de desplazamiento crea una geometría que es una distancia plana constante desde una polilínea o polígono de entrada.
superposiciones (geometría1, geometría2) Booleano Indica si una geometría se superpone a otra geometría.
planarArea (geometría, unidad) Número Calcula el área de la geometría de entrada.
planarLength (geometría, unidad) Número Calcula la longitud de la geometría de entrada.
relacionar (geometría1, geometría2, relación) Booleano Indica si la relación DE-9IM dada se cumple para las dos geometrías.
rotar (geometría, ángulo, rotaciónOrigen?) Geometría Gira una geometría en un ángulo especificado.
simplificar (geometría) Geometría Realiza la operación de simplificación en la geometría que altera las geometrías dadas para que sus definiciones sean topológicamente legales con respecto a su tipo de geometría.
symmetricDifference (leftGeometry, rightGeometry) Geometría | Geometría[] Crea la diferencia simétrica de dos geometrías.
toques (geometría1, geometría2) Booleano Indica si una geometría toca otra geometría.
union (geometrías) Geometría Todas las entradas deben ser del mismo tipo de geometrías y compartir una referencia espacial.
inside (innerGeometry, externalGeometry) Booleano Indica si una geometría está dentro de otra geometría.

Buffer (geometría, distancia, unidad, unionResults?)

Crea polígonos de zona de influencia planos (o euclidianos) a una distancia especificada alrededor de las geometrías de entrada.


Ver el vídeo: Rotación en sentido antihorario con un ángulo de 65 grado. (Septiembre 2021).