In \/blogs\/tilting\/2014\/07\/25\/semantic-overloading<\/A>, gehe ich auf eine der Hauptmotivationen für das Schreiben des Tilting at Globes<\/A>-Blogs ein:<\/P>Ich glaube, dass Semantik in allen Lebensbereichen wichtig ist. Ob im Recht, in der Medizin, Wissenschaft, Wirtschaft, Informationstechnologie oder einem anderen Bereich; eine gemeinsame Sprache nützt wenig, wenn es kein gemeinsames Verständnis der Wörter gibt, die die Sprache ausmachen. Da sich Sprachen entwickeln, ist es eine ständige Herausforderung, ein gemeinsames Verständnis von Wörtern über die Zeit hinweg aufrechtzuerhalten.<\/P><\/BLOCKQUOTE><\/P>Idealerweise würde ein gemeinsames Verständnis bedeuten, dass ein Wort oder Begriff eine einzige Bedeutung hat und diese eindeutige Bedeutung allen bekannt und verständlich ist, die das Wort oder den Begriff verwenden. Leider ist die Realität nicht immer ideal, und manchmal spielt der Kontext des Wortes oder Begriffs eine große Rolle für seine Bedeutung. Zum Beispiel kann die Anwendung des Begriffs "large-scale" auf Karten kontraintuitiv erscheinen im Vergleich dazu, wie er auf Handlungen, Ereignisse und typische Objekte angewendet wird. Wenn man versteht, dass sich der Maßstab einer Karte auf die Darstellung der Daten in der Karte bezieht, d.h. das Verhältnis der Entfernung in der Karte zur Entfernung auf dem Boden, hilft das zu erklären, warum "large-scale" Karten kleine geografische Gebiete abdecken anstatt große geografische Gebiete. Sicher könnte eine large-scale Karte ein großes geografisches Gebiet abdecken, wenn sie auf einem riesigen Medium gedruckt wird, aber ich nehme typische Druckgrößen an.<\/EM><\/P><\/P>Vom Thema Karten zu Geometrien wechselnd, bringe ich einen Fall von räumlichen Operatoren in \/blogs\/tilting\/2015\/05\/14\/whats-within-when-esri-clementini<\/A> zur Sprache. Im Blogbeitrag weise ich darauf hin, wie die Antwort darauf, ob eine Geometrie "within" einer anderen Geometrie ist, davon abhängen kann, wen man fragt oder genauer gesagt, wessen Definition von "within" verwendet wird, um die Frage zu beantworten. Oft sind die Qualifikatoren entweder unvollständig oder werden ganz weggelassen bei den Antworten, und wir verlassen uns daraufhin auf den Kontext, um die Lücken zu füllen.<\/P><\/P>Neben der Art und Weise, wie Geometrien zueinander in Beziehung stehen, gibt es sogar unterschiedliche Kontexte zum Verständnis der Struktur von Geometrien oder Geometrietypen. Esris aktuelle ArcGIS Geometry Object Model<\/A> gibt es seit der Veröffentlichung von ArcMap 8.0. Obwohl sich das Modell im Laufe der Zeit etwas weiterentwickelt hat, unterscheidet es sich nicht wesentlich von dem Zeitpunkt seiner Veröffentlichung 1999. Ich kenne die Geschichte des Esri ST_Geometry storage type<\/A> nicht genau, aber ich weiß, dass es mindestens seit den ArcGIS 9.x Tagen existiert. Selbst innerhalb eines Kontexts von Esri-Geometrietypen kann das Weglassen von Qualifikatoren manchmal zu Mehrdeutigkeiten führen. Es kann argumentiert werden, dass Esris REST API ein drittes Esri-Geometriemodell darstellt, aber das Hinzufügen dieses Geometriemodells zu diesem Blogbeitrag ändert nichts an den Beobachtungen und Schlussfolgerungen.<\/EM><\/P><\/P>Anstatt in Objektmodelldiagramme und Referenzdokumentationen einzutauchen, betrachten wir ein Beispiel dafür, wie sich ArcGIS- und ST_Geometry-Typen hinsichtlich ihrer Struktur unterscheiden. Unten sehen Sie ein Bild sowie den Code zur Erstellung von vier Geometrien in einer SQLite-Datenbank unter Verwendung des Esri ST_Geometry-Typs. Jede Geometrie ist sowohl mit ihrem ST_Geometry- als auch mit ihrem ArcGIS-Geometrietyp attribuiert.<\/P><\/P><\/P><\/P>import<\/SPAN> arcpyimport<\/SPAN> osimport<\/SPAN> sqlite3from<\/SPAN> itertools import<\/SPAN> chain# Definiere Geometriebeispiele<\/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))"<\/> )]# Definiere SQLite-Datenbank-Initialisierungsparameter<\/> sqlitedb =<\/> r"D:\tmp\test.sqlite"<\/> # Pfad zur SQLite DBst_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');" (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> für<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>,<\/SPAN>[<\/SPAN> (<\/SPAN>"UPDATE %s "<\/SPAN> "SET stgeom_type = st_geometrytype(geom);"<\/SPAN> %<\/SPAN> table)<\/SPAN> für<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># Erstellen der SQLite-Datenbank und Einrichten der Tabellen<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/SPA N>Connection(sqlitedb)< / SPAN >conn.< / SPAN >enable_load_extension(True)< / SPAN >cur =< / SPAN > conn.< / SPAN >cursor()< / SPAN >für sql in chain(*sql_stmts)< / SPAN >:< / SPAN > cur.< / SPAN >execute(sql)< / SPAN >conn.< / SPAN >commit()< / SPAN >del cur,< / SPAN > conn# ArcGIS-Geometrietyp ausfüllen< / SPAN >für table,< / SPAN > geom_type,< / SPAN > WKT in geoms:< / SPAN > mit arcpy.< / SPAN >da.< / SPAN >UpdateCursor( os.< / SPAN >path.< / SPAN >join(sqlitedb,< / SPAN > table)< / SPAN >,< / SPAN > ["shape@", "arcgis_type"< / SPAN > ) als cur:< / SPAN > & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ;& nb sp; f ü r s h ap e , _ LineString und MultiLineString Typen sowie Polygon und MultiPolygon Typen.
Ich glaube, dass Semantik in allen Lebensbereichen wichtig ist. Ob im Recht, in der Medizin, Wissenschaft, Wirtschaft, Informationstechnologie oder einem anderen Bereich; eine gemeinsame Sprache nützt wenig, wenn es kein gemeinsames Verständnis der Wörter gibt, die die Sprache ausmachen. Da sich Sprachen entwickeln, ist es eine ständige Herausforderung, ein gemeinsames Verständnis von Wörtern über die Zeit hinweg aufrechtzuerhalten.<\/P><\/BLOCKQUOTE><\/P>Idealerweise würde ein gemeinsames Verständnis bedeuten, dass ein Wort oder Begriff eine einzige Bedeutung hat und diese eindeutige Bedeutung allen bekannt und verständlich ist, die das Wort oder den Begriff verwenden. Leider ist die Realität nicht immer ideal, und manchmal spielt der Kontext des Wortes oder Begriffs eine große Rolle für seine Bedeutung. Zum Beispiel kann die Anwendung des Begriffs "large-scale" auf Karten kontraintuitiv erscheinen im Vergleich dazu, wie er auf Handlungen, Ereignisse und typische Objekte angewendet wird. Wenn man versteht, dass sich der Maßstab einer Karte auf die Darstellung der Daten in der Karte bezieht, d.h. das Verhältnis der Entfernung in der Karte zur Entfernung auf dem Boden, hilft das zu erklären, warum "large-scale" Karten kleine geografische Gebiete abdecken anstatt große geografische Gebiete. Sicher könnte eine large-scale Karte ein großes geografisches Gebiet abdecken, wenn sie auf einem riesigen Medium gedruckt wird, aber ich nehme typische Druckgrößen an.<\/EM><\/P><\/P>Vom Thema Karten zu Geometrien wechselnd, bringe ich einen Fall von räumlichen Operatoren in
Ich glaube, dass Semantik in allen Lebensbereichen wichtig ist. Ob im Recht, in der Medizin, Wissenschaft, Wirtschaft, Informationstechnologie oder einem anderen Bereich; eine gemeinsame Sprache nützt wenig, wenn es kein gemeinsames Verständnis der Wörter gibt, die die Sprache ausmachen. Da sich Sprachen entwickeln, ist es eine ständige Herausforderung, ein gemeinsames Verständnis von Wörtern über die Zeit hinweg aufrechtzuerhalten.<\/P><\/BLOCKQUOTE>
<\/P>
Idealerweise würde ein gemeinsames Verständnis bedeuten, dass ein Wort oder Begriff eine einzige Bedeutung hat und diese eindeutige Bedeutung allen bekannt und verständlich ist, die das Wort oder den Begriff verwenden. Leider ist die Realität nicht immer ideal, und manchmal spielt der Kontext des Wortes oder Begriffs eine große Rolle für seine Bedeutung. Zum Beispiel kann die Anwendung des Begriffs "large-scale" auf Karten kontraintuitiv erscheinen im Vergleich dazu, wie er auf Handlungen, Ereignisse und typische Objekte angewendet wird. Wenn man versteht, dass sich der Maßstab einer Karte auf die Darstellung der Daten in der Karte bezieht, d.h. das Verhältnis der Entfernung in der Karte zur Entfernung auf dem Boden, hilft das zu erklären, warum "large-scale" Karten kleine geografische Gebiete abdecken anstatt große geografische Gebiete. Sicher könnte eine large-scale Karte ein großes geografisches Gebiet abdecken, wenn sie auf einem riesigen Medium gedruckt wird, aber ich nehme typische Druckgrößen an.<\/EM><\/P><\/P>Vom Thema Karten zu Geometrien wechselnd, bringe ich einen Fall von räumlichen Operatoren in
Neben der Art und Weise, wie Geometrien zueinander in Beziehung stehen, gibt es sogar unterschiedliche Kontexte zum Verständnis der Struktur von Geometrien oder Geometrietypen. Esris aktuelle ArcGIS
import<\/SPAN> arcpyimport<\/SPAN> osimport<\/SPAN> sqlite3from<\/SPAN> itertools import<\/SPAN> chain# Definiere Geometriebeispiele<\/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))"<\/> )]# Definiere SQLite-Datenbank-Initialisierungsparameter<\/> sqlitedb =<\/> r"D:\tmp\test.sqlite"<\/> # Pfad zur SQLite DBst_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');" (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> für<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>,<\/SPAN>[<\/SPAN> (<\/SPAN>"UPDATE %s "<\/SPAN> "SET stgeom_type = st_geometrytype(geom);"<\/SPAN> %<\/SPAN> table)<\/SPAN> für<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># Erstellen der SQLite-Datenbank und Einrichten der Tabellen<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/SPA N>Connection(sqlitedb)< / SPAN >conn.< / SPAN >enable_load_extension(True)< / SPAN >cur =< / SPAN > conn.< / SPAN >cursor()< / SPAN >für sql in chain(*sql_stmts)< / SPAN >:< / SPAN > cur.< / SPAN >execute(sql)< / SPAN >conn.< / SPAN >commit()< / SPAN >del cur,< / SPAN > conn# ArcGIS-Geometrietyp ausfüllen< / SPAN >für table,< / SPAN > geom_type,< / SPAN > WKT in geoms:< / SPAN > mit arcpy.< / SPAN >da.< / SPAN >UpdateCursor( os.< / SPAN >path.< / SPAN >join(sqlitedb,< / SPAN > table)< / SPAN >,< / SPAN > ["shape@", "arcgis_type"< / SPAN > ) als cur:< / SPAN > & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ;& nb sp; f ü r s h ap e , _ LineString und MultiLineString Typen sowie Polygon und MultiPolygon Typen.
All dies führt zu einem Punkt, und ja, ich habe einen Punkt, dass ArcGIS polyline und polygon Typen im Grunde Multi-Typen sind, nur ohne das Multi- Präfix. Schlimmer noch, die meiste ArcGIS-Dokumentation entfernt den Benutzer noch weiter von der Struktur des ArcGIS Geometry Object Model. Anstatt dass Polylinien Pfade und Polygone Ringe haben, was sie tun, hat einfach alles "parts." Ich gehe auf dieses Problem der "parts" in /blogs/tilting/2016/02/20/the-single-multipart-polygons-with-interior-boundaries ein:
Das Problem mit den ArcPy Geometry-Klassen, zumindest einer von ihnen, ist, dass Esri mehrere spezifische Geometriekomponenten durch eine einzige generische ersetzt hat, die "part." Durch die Abstraktion von Geometrien und Ringen mit parts haben sie nicht nur von geospatialen Standards und Normen abgewichen, sondern auch das sehenswerte Multi-Part Single-Part Polygon geschaffen.
Ob es fehlende Präfixe oder das allgegenwärtige part ist, das Verständnis der Nuancen der Implementierung und Dokumentation des ArcGIS Geometry Object Model kann helfen zu verstehen, wie ArcGIS-Software, einschließlich ArcPy, mit anderen Geometrietypen interagiert.
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registrieren Sie ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.