In \/blogs\/tilting\/2014\/07\/25\/semantic-overloading<\/A>, behandel ik een van de belangrijkste motivaties voor het schrijven van de Tilting at Globes<\/A> blog:<\/P>Ik geloof dat semantics belangrijk zijn in alle aspecten van het leven. Of het nu gaat om recht, geneeskunde, wetenschap, zaken, informatietechnologie of een ander vakgebied; het hebben van een gemeenschappelijke taal helpt niet veel als er geen gemeenschappelijk begrip is van de woorden die de taal vormen. Aangezien talen evolueren, is het behouden van een gemeenschappelijk begrip van woorden in de loop van de tijd een voortdurende uitdaging.<\/P><\/BLOCKQUOTE><\/P>Idealiter zou een gemeenschappelijk begrip betekenen dat een woord of term één enkele betekenis heeft, en dat die ene betekenis bekend en begrepen wordt door iedereen die het woord of de term gebruikt. Helaas is de realiteit niet altijd ideaal, en soms speelt de context van het woord of de term een grote rol in de betekenis ervan. Bijvoorbeeld, hoe de term "large-scale" wordt toegepast op kaarten kan tegenintuïtief lijken ten opzichte van hoe het wordt toegepast op acties, gebeurtenissen en typische objecten. Wanneer men begrijpt dat kaartenschaal betrekking heeft op de weergave van gegevens in de kaart, d.w.z. de verhouding tussen afstand op de kaart en afstand op de grond, helpt dit verklaren waarom "large-scale" kaarten kleine geografische gebieden beslaan in plaats van grote geografische gebieden. Natuurlijk kan een large-scale kaart een groot geografisch gebied beslaan als deze op een enorm medium wordt afgedrukt, maar ik ga uit van typische afdrukformaten.<\/EM><\/P><\/P>Van kaarten naar geometrieën gaand, breng ik een geval aan van ruimtelijke operatoren in \/blogs\/tilting\/2015\/05\/14\/whats-within-when-esri-clementini<\/A> . In het blogbericht wijs ik erop hoe het antwoord op de vraag of de ene geometrie "within" een andere geometrie is, kan afhangen van wie je het vraagt, of nauwkeuriger gezegd, wiens definitie van "within" wordt gebruikt om de vraag te beantwoorden. Vaak zijn de kwalificaties onvolledig of worden ze helemaal weggelaten bij de antwoorden, en vertrouwen we op context om de hiaten op te vullen.<\/P><\/P>Naast hoe geometrieën zich tot elkaar verhouden, zijn er zelfs verschillende contexten voor het begrijpen van de structuur van geometrieën of geometrietypen. Esri's huidige generatie ArcGIS Geometry Object Model<\/A> bestaat al sinds de release van ArcMap 8.0. Hoewel het model in de loop der tijd enigszins is geëvolueerd, is het niet wezenlijk anders dan toen het in 1999 werd uitgebracht. Ik ben niet duidelijk over de geschiedenis van Esri's ST_Geometry storage type<\/A>, maar ik weet dat het al bestaat sinds ten minste de ArcGIS 9.x dagen. Zelfs binnen een context van Esri geometry types kan het weglaten van kwalificaties soms tot ambiguïteit leiden. Er kan worden betoogd dat Esri's REST API een derde Esri geometry model vertegenwoordigt, maar het toevoegen van dat geometry model aan dit blogbericht verandert niets aan de observaties en conclusies.<\/EM><\/P><\/P>In plaats van te duiken in objectmodeldiagrammen en referentiedocumentatie, laten we eens kijken naar een voorbeeld van hoe ArcGIS en ST_Geometry types verschillen qua structuur. Hieronder staat een afbeelding en code om vier geometrieën te maken in een SQLite-database met behulp van Esri's ST_Geometry type. Elke geometrie is voorzien van attributen met zowel zijn ST_Geometry als ArcGIS geometry type.<\/P><\/P><\/P><\/P>import<\/SPAN> arcpy\nimport<\/SPAN> os\nimport<\/SPAN> sqlite3\nfrom<\/SPAN> itertools import<\/SPAN> chain\n\n# Define geometry samples<\/SPAN>\nPCSCode =<\/<SPAN> 3857<\/<SPAN>\ngeoms =<\/<SPAN> [<\/<SPAN>\n (<\/<SPAN>"poly"<\/<SPAN>,<\/<SPAN> "polygon"<\/<SPAN>,<\/<SPAN> "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"<\/<SPAN>)<\/<SPAN>,<\/<SPAN>\n (<\/<SPAN>"multipoly"<\/<SPAN>,<\/<SPAN> "multipolygon"<\/<SPAN>,<\/<SPAN> (<\/<SPAN>"MULTIPOLYGON(((15 0, 25 0, 25 10, 15 10, 15 0)),"<\/<SPAN>\n "((18 13, 18 18, 24 18, 24 13, 18 13)))"<\/<SPAN>)<\/<SPAN>)<\/<SPAN>,<\/<SPAN>\n (<\/<SPAN>"line"<\/<SPAN>,<\/<SPAN> "linestring"<\/<SPAN>,<\/<SPAN> "LINESTRING(3 13, 3 18)"<\/<SPAN>)<\/<SPAN>,<\/<SPAN>\n (<\/<Span">multiline,</span> <spanclass=stringtoken>multilinestring</spanclass=stringtoken>,</span> <spanclass=stringtoken>MULTILINESTRING((6 13, 9 13),(9 14, 9 17))</spanclass=stringtoken>)</span>]</span># Define SQLite database initialization parameters</span>sqlitedb <spanclass=operatortoken>=</span>r<spanclass=stringtoken>"D:\tmp\test.sqlite"</span> <spanclass=commenttoken># pad naar SQLite DB</span>st_geometry_dll <spanclass=operatortoken>=</span>r<spanclass=stringtoken>"DatabaseSupport\\SQLite\\Windows32\\stgeometry_sqlite.dll"</span>st_geometry_dll <spanclass=operatortoken>=</span>os<spanclass=punctuationtoken>.</span>path<spanclass=punctuationtoken>.</span>join<spanclass=punctuationtoken>( (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> voor<\/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> voor<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># Maak SQLite database en stel tabellen in<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/SPAN>Connection(<\/Span>sqlitedb)conn.enable_load_extension(True)cur = conn.cursor()voor sql in chain(*sql_stmts): cur.execute(sql)conn.commit()del cur, conn# Vul ArcGIS geometrie type invoor table, geom_type, WKT in geoms: met arcpy.da.UpdateCursor( os.path.join(sqlitedb, table), ["shape@", "arcgis_type"] ) als cur: voor shape, _ in cur: cur.updateRow([shape, shape.type])del cur </ 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 >< span > << EM O J I _ 53 >> </ s p a n > < s p a n > < < E M O J I _ 54 > > < / s p a n > < s p a n > < < E M O J I _ 55 > > < / s p a n > < s p a n > < < E M O J I _ 56 > > < / s p a n > < s p a n > < < E M O J I _ 57 > > < / s p a n > < s p a n > < < E M O J I _ 58 > > < / s p a n > < s p a n > < < E M O J I _ 59 > > < / s p a n > < s p a n > < < E M O J I _ 60 > > < / s p a n > < s p a n > < < E M O J I _ 61 > >
Ik geloof dat semantics belangrijk zijn in alle aspecten van het leven. Of het nu gaat om recht, geneeskunde, wetenschap, zaken, informatietechnologie of een ander vakgebied; het hebben van een gemeenschappelijke taal helpt niet veel als er geen gemeenschappelijk begrip is van de woorden die de taal vormen. Aangezien talen evolueren, is het behouden van een gemeenschappelijk begrip van woorden in de loop van de tijd een voortdurende uitdaging.<\/P><\/BLOCKQUOTE><\/P>Idealiter zou een gemeenschappelijk begrip betekenen dat een woord of term één enkele betekenis heeft, en dat die ene betekenis bekend en begrepen wordt door iedereen die het woord of de term gebruikt. Helaas is de realiteit niet altijd ideaal, en soms speelt de context van het woord of de term een grote rol in de betekenis ervan. Bijvoorbeeld, hoe de term "large-scale" wordt toegepast op kaarten kan tegenintuïtief lijken ten opzichte van hoe het wordt toegepast op acties, gebeurtenissen en typische objecten. Wanneer men begrijpt dat kaartenschaal betrekking heeft op de weergave van gegevens in de kaart, d.w.z. de verhouding tussen afstand op de kaart en afstand op de grond, helpt dit verklaren waarom "large-scale" kaarten kleine geografische gebieden beslaan in plaats van grote geografische gebieden. Natuurlijk kan een large-scale kaart een groot geografisch gebied beslaan als deze op een enorm medium wordt afgedrukt, maar ik ga uit van typische afdrukformaten.<\/EM><\/P><\/P>Van kaarten naar geometrieën gaand, breng ik een geval aan van ruimtelijke operatoren in
Ik geloof dat semantics belangrijk zijn in alle aspecten van het leven. Of het nu gaat om recht, geneeskunde, wetenschap, zaken, informatietechnologie of een ander vakgebied; het hebben van een gemeenschappelijke taal helpt niet veel als er geen gemeenschappelijk begrip is van de woorden die de taal vormen. Aangezien talen evolueren, is het behouden van een gemeenschappelijk begrip van woorden in de loop van de tijd een voortdurende uitdaging.<\/P><\/BLOCKQUOTE>
<\/P>
Idealiter zou een gemeenschappelijk begrip betekenen dat een woord of term één enkele betekenis heeft, en dat die ene betekenis bekend en begrepen wordt door iedereen die het woord of de term gebruikt. Helaas is de realiteit niet altijd ideaal, en soms speelt de context van het woord of de term een grote rol in de betekenis ervan. Bijvoorbeeld, hoe de term "large-scale" wordt toegepast op kaarten kan tegenintuïtief lijken ten opzichte van hoe het wordt toegepast op acties, gebeurtenissen en typische objecten. Wanneer men begrijpt dat kaartenschaal betrekking heeft op de weergave van gegevens in de kaart, d.w.z. de verhouding tussen afstand op de kaart en afstand op de grond, helpt dit verklaren waarom "large-scale" kaarten kleine geografische gebieden beslaan in plaats van grote geografische gebieden. Natuurlijk kan een large-scale kaart een groot geografisch gebied beslaan als deze op een enorm medium wordt afgedrukt, maar ik ga uit van typische afdrukformaten.<\/EM><\/P><\/P>Van kaarten naar geometrieën gaand, breng ik een geval aan van ruimtelijke operatoren in
Naast hoe geometrieën zich tot elkaar verhouden, zijn er zelfs verschillende contexten voor het begrijpen van de structuur van geometrieën of geometrietypen. Esri's huidige generatie ArcGIS
import<\/SPAN> arcpy\nimport<\/SPAN> os\nimport<\/SPAN> sqlite3\nfrom<\/SPAN> itertools import<\/SPAN> chain\n\n# Define geometry samples<\/SPAN>\nPCSCode =<\/<SPAN> 3857<\/<SPAN>\ngeoms =<\/<SPAN> [<\/<SPAN>\n (<\/<SPAN>"poly"<\/<SPAN>,<\/<SPAN> "polygon"<\/<SPAN>,<\/<SPAN> "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"<\/<SPAN>)<\/<SPAN>,<\/<SPAN>\n (<\/<SPAN>"multipoly"<\/<SPAN>,<\/<SPAN> "multipolygon"<\/<SPAN>,<\/<SPAN> (<\/<SPAN>"MULTIPOLYGON(((15 0, 25 0, 25 10, 15 10, 15 0)),"<\/<SPAN>\n "((18 13, 18 18, 24 18, 24 13, 18 13)))"<\/<SPAN>)<\/<SPAN>)<\/<SPAN>,<\/<SPAN>\n (<\/<SPAN>"line"<\/<SPAN>,<\/<SPAN> "linestring"<\/<SPAN>,<\/<SPAN> "LINESTRING(3 13, 3 18)"<\/<SPAN>)<\/<SPAN>,<\/<SPAN>\n (<\/<Span">multiline,</span> <spanclass=stringtoken>multilinestring</spanclass=stringtoken>,</span> <spanclass=stringtoken>MULTILINESTRING((6 13, 9 13),(9 14, 9 17))</spanclass=stringtoken>)</span>]</span># Define SQLite database initialization parameters</span>sqlitedb <spanclass=operatortoken>=</span>r<spanclass=stringtoken>"D:\tmp\test.sqlite"</span> <spanclass=commenttoken># pad naar SQLite DB</span>st_geometry_dll <spanclass=operatortoken>=</span>r<spanclass=stringtoken>"DatabaseSupport\\SQLite\\Windows32\\stgeometry_sqlite.dll"</span>st_geometry_dll <spanclass=operatortoken>=</span>os<spanclass=punctuationtoken>.</span>path<spanclass=punctuationtoken>.</span>join<spanclass=punctuationtoken>( (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> voor<\/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> voor<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># Maak SQLite database en stel tabellen in<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/SPAN>Connection(<\/Span>sqlitedb)conn.enable_load_extension(True)cur = conn.cursor()voor sql in chain(*sql_stmts): cur.execute(sql)conn.commit()del cur, conn# Vul ArcGIS geometrie type invoor table, geom_type, WKT in geoms: met arcpy.da.UpdateCursor( os.path.join(sqlitedb, table), ["shape@", "arcgis_type"] ) als cur: voor shape, _ in cur: cur.updateRow([shape, shape.type])del cur </ 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 >< span > << EM O J I _ 53 >> </ s p a n > < s p a n > < < E M O J I _ 54 > > < / s p a n > < s p a n > < < E M O J I _ 55 > > < / s p a n > < s p a n > < < E M O J I _ 56 > > < / s p a n > < s p a n > < < E M O J I _ 57 > > < / s p a n > < s p a n > < < E M O J I _ 58 > > < / s p a n > < s p a n > < < E M O J I _ 59 > > < / s p a n > < s p a n > < < E M O J I _ 60 > > < / s p a n > < s p a n > < < E M O J I _ 61 > >
E en paar observaties:< / P >
If de ST_Geometry-typen bekend voorkomen voor degenen die met open standaarden werken, is dat geen toeval.& nbsp ; De documentatie over deHoe is ST_Geometry geïmplementeerd?—Help | ArcGIS Desktop vermeldt op verschillende plaatsen dat ST_Geometry "een opslagtype met hoge prestaties is dat ISO- en OGC-conforme SQL-toegang tot ruimtelijke gegevens omvat."& nbsp ; Er zijn verschillende ISO- en OGC-standaarden als het gaat om geometrieën, en het deel van de verklaring over "SQL-toegang tot ruimtelijke gegevens" is eigenlijk vrij belangrijk als kwalificatie.< / P >piso- en="" ogc-conformiteit="" is="" vrij="" breed="" over="" verschillende="" geometrie="" modellen="" of="" opslagtypes,="" bijvoorbeeld="" microsoft's="" stgeometry,="" oracle's="" sdo_geom,&="" nbsp="" ;="" postgis="" st_geometry="" anderen.&="" het="" ogc="" objectmodel="" wordt="" beschreven="" inOpenGIS® Implementatiestandaard voor geografische informatie - eenvoudige feature toegang - Deel 1: Gemeenschappelijke architectuur. In plaats van een diagram van de geometrie klasse hiërarchie in te sluiten of alle geometrie types op te sommen, zal ik delen daar zijn LineString en MultiLineString types evenals een Polygon en MultiPolygon types.
Dit alles leidt tot een punt, en ja ik heb een punt, dat ArcGIS polyline en polygon types in feite multi-types zijn, alleen zonder het multi- voorvoegsel. Nog erger is dat het merendeel van de ArcGIS documentatie de gebruiker nog verder abstraheert van de structuur van het ArcGIS Geometry Object Model. In plaats van dat polylines paden hebben en polygonen ringen, wat ze wel doen, heeft alles gewoon "parts." Ik bespreek dit probleem van "parts" in /blogs/tilting/2016/02/20/the-single-multipart-polygons-with-interior-boundaries:
Het probleem met de ArcPy Geometry klassen, ten minste één ervan, is dat Esri meerdere, specifieke geometriecomponenten heeft vervangen door één enkele generieke component, de "part." Door geometrieën en ringen te abstraheren met parts, zijn ze niet alleen afgeweken van georuimtelijke standaarden en normen, ze hebben ook het sideshow-waardige multi-part single-part polygon gecreëerd.
Of het nu ontbrekende voorvoegsels zijn of de alomtegenwoordige part, het begrijpen van de nuances van de implementatie en documentatie van het ArcGIS Geometry Object Model kan helpen te begrijpen hoe ArcGIS software, inclusief ArcPy, interacteert met andere geometrie types.
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.