En \/blogs\/tilting\/2014\/07\/25\/semantic-overloading<\/A>, toco uno de los principales motivos para escribir el blog Tilting at Globes<\/A>:<\/P>Creo que la semántica es importante en todos los aspectos de la vida. Ya sea en derecho, medicina, ciencia, negocios, tecnología de la información o cualquier otro campo; tener un lenguaje común no sirve de mucho si no hay un entendimiento común de las palabras que componen el lenguaje. Dado que los idiomas evolucionan, mantener un entendimiento común de las palabras a lo largo del tiempo es un desafío continuo.<\/P><\/BLOCKQUOTE><\/P>Idealmente, un entendimiento común significaría que una palabra o término tiene un solo significado, y ese significado singular es conocido y comprendido por todos los que usan la palabra o término. Desafortunadamente, la realidad no siempre es ideal, y a veces el contexto de la palabra o término juega un papel importante en su significado. Por ejemplo, cómo se aplica el término "large-scale" a los mapas puede parecer contraintuitivo respecto a cómo se aplica a acciones, eventos y objetos típicos. Cuando uno entiende que la escala del mapa se aplica a la representación de datos en el mapa, es decir, la proporción de distancia en el mapa a distancia en el terreno, ayuda a explicar por qué los mapas "large-scale" cubren áreas geográficas pequeñas en lugar de grandes áreas geográficas. Claro, un mapa large-scale podría cubrir una gran área geográfica si se imprime en un medio enorme, pero estoy asumiendo tamaños de impresión típicos.<\/EM><\/P><\/P>Pasando de mapas a geometrías, menciono un caso de operadores espaciales en \/blogs\/tilting\/2015\/05\/14\/whats-within-when-esri-clementini<\/A> . En la publicación del blog, señalo cómo la respuesta a si una geometría está "within" otra geometría puede depender de a quién le preguntes, o más precisamente, de qué definición de "within" se usa para responder la pregunta. A menudo, los calificadores están incompletos o se omiten completamente en las respuestas, y terminamos confiando en el contexto para llenar los vacíos.<\/P><\/P>Además de cómo las geometrías se relacionan entre sí, existen incluso diferentes contextos para entender la estructura de las geometrías o tipos de geometría. El modelo actual Geometry Object Model de ArcGIS de Esri Geometry Object Model<\/A> ha existido desde el lanzamiento de ArcMap 8.0. Aunque el modelo ha evolucionado algo con el tiempo, no es significativamente diferente al que se lanzó en 1999. No tengo claro el historial del tipo de almacenamiento ST_Geometry de Esri ST_Geometry storage type<\/A>, pero sé que ha existido al menos desde los días de ArcGIS 9.x. Incluso operando dentro del contexto de tipos de geometría Esri, omitir calificadores puede llevar a ambigüedad a veces. Se puede argumentar que la REST API de Esri representa un tercer modelo de geometría Esri, pero agregar ese modelo geométrico en esta publicación no cambia las observaciones ni conclusiones.<\/EM><\/P><\/P>En lugar de sumergirnos en diagramas del modelo objeto y documentación de referencia, veamos un ejemplo de cómo difieren los tipos ArcGIS y ST_Geometry en términos de estructura. A continuación hay una imagen y el código para crear cuatro geometrías en una base de datos SQLite usando el tipo ST_Geometry de Esri. Cada geometría está atribuida con su tipo ST_Geometry y tipo ArcGIS.<\/P><\/P><\/P><\/P>import<\/SPAN> arcpyimport<\/SPAN> osimport<\/SPAN> sqlite3from<\/SPAN> itertools import<\/SPAN> chain# Definir muestras de geometría<\/SPAN>PCSCode =<\/> 3857<\/>geoms =<\/> [ ("poly"<\/>, "polygon"<\/>, "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"<\/>) , ("multipoly"<\/>, "multipolygon"<\/>, ("MULTIPOLYGON(((15 0, 25 0, 25 10, 15 10, 15 0)),"<\/> "((18 13, 18 18, 24 18, 24 13, 18 13)))"<\/>) ) , ("line"<\/>, "linestring"<\/>, "LINESTRING(3 13, 3 18)"<\/>) , ("multiline"<\/>, "multilinestring"<\/>, "MULTILINESTRING((6 13, 9 13),(9 14, 9 17))"<\/>)]# Definir parámetros para inicialización base datos SQLite<\/SPAN>sqlitedb =<\/> r"D:\tmp\test.sqlite"<\/> # ruta a base datos SQLite<\/SPAN>st_geometry_dll =<\/> r"DatabaseSupport\\SQLite\\Windows32\\stgeometry_sqlite.dll"<\/>st_geometry_dll =<\/> os.path.join(arcpy.GetInstallInfo()["InstallDir"<\/>], st_geometry_dll)sql_stmts =<\/> [[ "SELECT load_extension('%s','SDE_SQL_funcs_init');" % st_geometry_dll ],[   (“CREATE TABLE %s ”    “(id integer primary key autoincrement not null, ”    “stgeom_type text, arcgis_type text);”%table)   for table,,geom_type,,wkt in geoms ],[ (“SELECT AddGeometryColumn ” “(null,'%s','geom',%s,'%s',2,'null');”% (table,,PCSCode,,geom_type) ) for table,,geom_type,,wkt in geoms ],[ (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> para<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT en<\/SPAN> geoms ]<\/SPAN>,<\/SPAN>[<\/SPAN> (<\/SPAN>"UPDATE %s "<\/SPAN> "SET stgeom_type = st_geometrytype(geom);"<\/SPAN> %<\/SPAN> table)<\/SPAN> para<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT en<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># Crear base de datos SQLite y configurar tablas<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/SPAN>Connection(<\/Span>sqlitedb)<\/Span>conn.<\/Span>enable_load_extension(True)cur = conn.cursor()para sql en chain(*sql_stmts): cur.execute(sql)conn.commit()borrar cur, conn# Rellenar tipo de geometría ArcGISpara table, geom_type, WKT en geoms: con arcpy.da.UpdateCursor( os.path.join(sqlitedb, table), ["shape@", "arcgis_type"] ) as cur: para shape, _ en cur: cur.updateRow([shape, shape.type])borrar cur </ span >< span >< < EMOJI_21 > > </ span >< span >< < EMOJI_22 > > </ span >< span >< < EMOJI_23 > > </ span >< span >< < EMOJI_24 > > </ span >< span >< < EMOJI_25 > > </ span >< span >< < EMOJI_26 > > </ span >< span >< < EMOJI_27 > > </ span >< span >< < EMOJI_28 > > </ span >< span >< < EMOJI_29 > > </ span >< span >< < EMOJI_30 > > </ span >< span >< < EMOJI_31 > > </ span >< span >< < EMOJI_32 > > </ span >< span >< < EMOJI_33 > > </ span >< span >< < EMOJI_34 > > </ span >< span >< < EMOJI_35 > > </ span >< span >< < EMOJI_36 > > </ span >< span >< < EMOJI_37 > > </ span >< span >< < EMOJI_38 > > </ span >< span >< < EMOJI_39 > > </ span >< span >< < EMOJI_40 > > </ span >< span >< < EMOJI_41 > > </ span >< span >< < EMOJI_42 > > </ span >< span >< < EMOJI_43 > > </ span >< span >< < EMOJI_44 > > </ span >< span >< < EMOJI_45 > > </ span >< span >< < EMOJI_46 > > </ span >< span >< < EMOJI_47 > > </ span >< span >< < EMOJI_48 > > </ span >< span >< < EMOJI_49 > > </ span >< span >< < EMOJI_50 > > </ span >< span >< < EMOJI_51 > > </ span >< span >< < EMOJI_52 > ></ Span <<EM O J I _ 53 >> << E M O J I _ 54 >> << E M O J I _ 55 >> << E M O J I _ 56 >> << E M O J I _ 57 >> << E M O J I _ 58 >> << E M O J I _ 59 >> << E M O J I _ 60 >> << E M O J I _ 61 >>Pocas observaciones:Tiene ArcGIS un único tipo de geometría de polilínea, ST_Geometry tiene los tipos ST_LINESTRING y ST_MULTILINESTRING.Tiene ArcGIS un único tipo de geometría de polígono, ST_Geometry tiene los tipos ST_POLYGON y ST_MULTIPOLYGON.Mientras que ArcGIS tiene punto y multipunto no hay prefijo multi cuando se trabaja con polilínea y polígono.
Creo que la semántica es importante en todos los aspectos de la vida. Ya sea en derecho, medicina, ciencia, negocios, tecnología de la información o cualquier otro campo; tener un lenguaje común no sirve de mucho si no hay un entendimiento común de las palabras que componen el lenguaje. Dado que los idiomas evolucionan, mantener un entendimiento común de las palabras a lo largo del tiempo es un desafío continuo.<\/P><\/BLOCKQUOTE><\/P>Idealmente, un entendimiento común significaría que una palabra o término tiene un solo significado, y ese significado singular es conocido y comprendido por todos los que usan la palabra o término. Desafortunadamente, la realidad no siempre es ideal, y a veces el contexto de la palabra o término juega un papel importante en su significado. Por ejemplo, cómo se aplica el término "large-scale" a los mapas puede parecer contraintuitivo respecto a cómo se aplica a acciones, eventos y objetos típicos. Cuando uno entiende que la escala del mapa se aplica a la representación de datos en el mapa, es decir, la proporción de distancia en el mapa a distancia en el terreno, ayuda a explicar por qué los mapas "large-scale" cubren áreas geográficas pequeñas en lugar de grandes áreas geográficas. Claro, un mapa large-scale podría cubrir una gran área geográfica si se imprime en un medio enorme, pero estoy asumiendo tamaños de impresión típicos.<\/EM><\/P><\/P>Pasando de mapas a geometrías, menciono un caso de operadores espaciales en
Creo que la semántica es importante en todos los aspectos de la vida. Ya sea en derecho, medicina, ciencia, negocios, tecnología de la información o cualquier otro campo; tener un lenguaje común no sirve de mucho si no hay un entendimiento común de las palabras que componen el lenguaje. Dado que los idiomas evolucionan, mantener un entendimiento común de las palabras a lo largo del tiempo es un desafío continuo.<\/P><\/BLOCKQUOTE>
<\/P>
Idealmente, un entendimiento común significaría que una palabra o término tiene un solo significado, y ese significado singular es conocido y comprendido por todos los que usan la palabra o término. Desafortunadamente, la realidad no siempre es ideal, y a veces el contexto de la palabra o término juega un papel importante en su significado. Por ejemplo, cómo se aplica el término "large-scale" a los mapas puede parecer contraintuitivo respecto a cómo se aplica a acciones, eventos y objetos típicos. Cuando uno entiende que la escala del mapa se aplica a la representación de datos en el mapa, es decir, la proporción de distancia en el mapa a distancia en el terreno, ayuda a explicar por qué los mapas "large-scale" cubren áreas geográficas pequeñas en lugar de grandes áreas geográficas. Claro, un mapa large-scale podría cubrir una gran área geográfica si se imprime en un medio enorme, pero estoy asumiendo tamaños de impresión típicos.<\/EM><\/P><\/P>Pasando de mapas a geometrías, menciono un caso de operadores espaciales en
Además de cómo las geometrías se relacionan entre sí, existen incluso diferentes contextos para entender la estructura de las geometrías o tipos de geometría. El modelo actual Geometry Object Model de ArcGIS de Esri
import<\/SPAN> arcpyimport<\/SPAN> osimport<\/SPAN> sqlite3from<\/SPAN> itertools import<\/SPAN> chain# Definir muestras de geometría<\/SPAN>PCSCode =<\/> 3857<\/>geoms =<\/> [ ("poly"<\/>, "polygon"<\/>, "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"<\/>) , ("multipoly"<\/>, "multipolygon"<\/>, ("MULTIPOLYGON(((15 0, 25 0, 25 10, 15 10, 15 0)),"<\/> "((18 13, 18 18, 24 18, 24 13, 18 13)))"<\/>) ) , ("line"<\/>, "linestring"<\/>, "LINESTRING(3 13, 3 18)"<\/>) , ("multiline"<\/>, "multilinestring"<\/>, "MULTILINESTRING((6 13, 9 13),(9 14, 9 17))"<\/>)]# Definir parámetros para inicialización base datos SQLite<\/SPAN>sqlitedb =<\/> r"D:\tmp\test.sqlite"<\/> # ruta a base datos SQLite<\/SPAN>st_geometry_dll =<\/> r"DatabaseSupport\\SQLite\\Windows32\\stgeometry_sqlite.dll"<\/>st_geometry_dll =<\/> os.path.join(arcpy.GetInstallInfo()["InstallDir"<\/>], st_geometry_dll)sql_stmts =<\/> [[ "SELECT load_extension('%s','SDE_SQL_funcs_init');" % st_geometry_dll ],[   (“CREATE TABLE %s ”    “(id integer primary key autoincrement not null, ”    “stgeom_type text, arcgis_type text);”%table)   for table,,geom_type,,wkt in geoms ],[ (“SELECT AddGeometryColumn ” “(null,'%s','geom',%s,'%s',2,'null');”% (table,,PCSCode,,geom_type) ) for table,,geom_type,,wkt in geoms ],[ (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> para<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT en<\/SPAN> geoms ]<\/SPAN>,<\/SPAN>[<\/SPAN> (<\/SPAN>"UPDATE %s "<\/SPAN> "SET stgeom_type = st_geometrytype(geom);"<\/SPAN> %<\/SPAN> table)<\/SPAN> para<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT en<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># Crear base de datos SQLite y configurar tablas<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/SPAN>Connection(<\/Span>sqlitedb)<\/Span>conn.<\/Span>enable_load_extension(True)cur = conn.cursor()para sql en chain(*sql_stmts): cur.execute(sql)conn.commit()borrar cur, conn# Rellenar tipo de geometría ArcGISpara table, geom_type, WKT en geoms: con arcpy.da.UpdateCursor( os.path.join(sqlitedb, table), ["shape@", "arcgis_type"] ) as cur: para shape, _ en cur: cur.updateRow([shape, shape.type])borrar cur </ span >< span >< < EMOJI_21 > > </ span >< span >< < EMOJI_22 > > </ span >< span >< < EMOJI_23 > > </ span >< span >< < EMOJI_24 > > </ span >< span >< < EMOJI_25 > > </ span >< span >< < EMOJI_26 > > </ span >< span >< < EMOJI_27 > > </ span >< span >< < EMOJI_28 > > </ span >< span >< < EMOJI_29 > > </ span >< span >< < EMOJI_30 > > </ span >< span >< < EMOJI_31 > > </ span >< span >< < EMOJI_32 > > </ span >< span >< < EMOJI_33 > > </ span >< span >< < EMOJI_34 > > </ span >< span >< < EMOJI_35 > > </ span >< span >< < EMOJI_36 > > </ span >< span >< < EMOJI_37 > > </ span >< span >< < EMOJI_38 > > </ span >< span >< < EMOJI_39 > > </ span >< span >< < EMOJI_40 > > </ span >< span >< < EMOJI_41 > > </ span >< span >< < EMOJI_42 > > </ span >< span >< < EMOJI_43 > > </ span >< span >< < EMOJI_44 > > </ span >< span >< < EMOJI_45 > > </ span >< span >< < EMOJI_46 > > </ span >< span >< < EMOJI_47 > > </ span >< span >< < EMOJI_48 > > </ span >< span >< < EMOJI_49 > > </ span >< span >< < EMOJI_50 > > </ span >< span >< < EMOJI_51 > > </ span >< span >< < EMOJI_52 > ></ Span <<EM O J I _ 53 >> << E M O J I _ 54 >> << E M O J I _ 55 >> << E M O J I _ 56 >> << E M O J I _ 57 >> << E M O J I _ 58 >> << E M O J I _ 59 >> << E M O J I _ 60 >> << E M O J I _ 61 >>Pocas observaciones:Tiene ArcGIS un único tipo de geometría de polilínea, ST_Geometry tiene los tipos ST_LINESTRING y ST_MULTILINESTRING.Tiene ArcGIS un único tipo de geometría de polígono, ST_Geometry tiene los tipos ST_POLYGON y ST_MULTIPOLYGON.Mientras que ArcGIS tiene punto y multipunto no hay prefijo multi cuando se trabaja con polilínea y polígono.
If the ST_Geometry types look familiar to those who work with open standards, it isn't coincidence. La documentación enCómo se implementa ST_Geometry? — Ayuda | ArcGIS Desktop, indica en varios lugares que ST_Geometry "es un tipo de almacenamiento de alto rendimiento que incluye acceso SQL compatible con ISO y OGC a datos espaciales." Hay varios estándares ISO y OGC cuando se trata de geometrías, y la parte "acceso SQL a datos espaciales" de la declaración es realmente bastante importante como calificador.
Cumplir con ISO y OGC es bastante amplio en varios modelos de geometría o tipos de almacenamiento, por ejemplo, STGeometry de Microsoft, SDO_GEOM de Oracle, ST_Geometry de PostGIS/PostgreSQL y otros. El modelo de objeto de geometría OGC/OpenGIS se describe enOpenGIS® Implementation Standard for Geographic information - Simple feature access - Part 1: Common architecture. En lugar de incrustar un diagrama jerárquico de clases de geometría o listar todos los tipos de geometría, compartiré allí son tipos LineString y MultiLineString así como tipos Polygon y MultiPolygon.<\/P>
Todo esto conduce a un punto, y sí, tengo un punto, que los tipos polyline y polygon de ArcGIS son básicamente multi-tipos, solo que les falta el prefijo multi-. Peor aún, la mayoría de la documentación de ArcGIS abstrae al usuario aún más de la estructura del Modelo de Objeto Geométrico Geometry Object Model. En lugar de que las polilíneas tengan paths y los polígonos tengan rings, que sí los tienen, todo simplemente tiene "parts". Abordo este problema de "parts" en \/blogs\/tilting\/2016\/02\/20\/the-single-multipart-polygons-with-interior-boundaries:<\/P>
El problema con las clases Geometry de ArcPy, al menos una de ellas, es que Esri reemplazó múltiples componentes geométricos específicos con uno genérico único, el "part". Al abstraer geometrías y rings con parts, no solo se desviaron de los estándares y normas geoespaciales, sino que crearon el polígono de una sola parte con múltiples partes digno de un espectáculo secundario.<\/SPAN><\/BLOCKQUOTE><\/P>Ya sea por la falta de prefijos o por el ubicuo part, entender las sutilezas de la implementación y documentación del Modelo de Objeto Geométrico Geometry Object Model de ArcGIS puede ayudar a comprender cómo el software ArcGIS, incluido ArcPy, interactúa con otros tipos de geometría.<\/SPAN><\/P><\/BODY><\/HTML>
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.