\/blogs\/tilting\/2014\/07\/25\/semantic-overloading<\/A> では、Tilting at Globes<\/A> ブログを書く主な動機の一つに触れています:<\/P>私は、意味論が人生のあらゆる側面で重要だと信じています。法律、医療、科学、ビジネス、情報技術、またはその他のどんな分野であっても、共通の言語があっても、その言語を構成する単語の共通理解がなければあまり役に立ちません。言語は進化するため、時間をかけて単語の共通理解を維持することは継続的な課題です。<\/P><\/BLOCKQUOTE><\/P>理想的には、共通理解とは単語や用語が単一の意味を持ち、その単一の意味がその単語や用語を使うすべての人に知られ理解されていることを意味します。残念ながら現実は常に理想的ではなく、時には単語や用語の文脈がその意味に大きく影響します。例えば、「large-scale」という用語が地図に適用される場合は、行動、出来事、典型的な物体に適用される場合とは直感に反するように見えることがあります。地図の縮尺は地図上の距離と地上の距離の比率、すなわち地図内のデータ表現に適用されることを理解すると、「large-scale」地図が大きな地理的領域ではなく小さな地理的領域をカバーする理由が説明できます。確かに、大きな媒体に印刷された場合は大規模な地図が大きな地理的領域をカバーすることもありますが、ここでは一般的な印刷サイズを想定しています。<\/EM><\/P><\/P>地図からジオメトリへ移ると、\/blogs\/tilting\/2015\/05\/14\/whats-within-when-esri-clementini<\/A> で空間演算子の事例を取り上げています。このブログ記事では、一つのジオメトリが別のジオメトリ「within」かどうかの答えは誰に尋ねるか、より正確には「within」の定義を誰が使うかによって異なることを指摘しています。多くの場合、その修飾語は不完全であったり回答から完全に省略されたりし、そのギャップを文脈に頼って埋めることになります。<\/P><\/P>ジオメトリ同士の関係だけでなく、ジオメトリやジオメトリタイプの構造を理解するためにも異なる文脈があります。Esri の現世代 ArcGIS Geometry Object Model<\/A> は ArcMap 8.0 のリリース以来存在しています。このモデルは時間とともに多少進化しましたが、1999年のリリース時と大きく変わっていません。Esri の ST_Geometry ストレージタイプ<\/A> の歴史については明確ではありませんが、少なくとも ArcGIS 9.x 時代から存在していることは知っています。Esri ジオメトリタイプという文脈内でも修飾語を省略すると時として曖昧さにつながります。Esri の REST API が第3の Esri ジオメトリモデルを表していると主張することもできますが、このブログ記事にそのモデルを加えても観察結果や結論は変わりません。<\/EM><\/P><\/P>オブジェクトモデル図やリファレンスドキュメントに深入りする代わりに、ArcGIS と ST_Geometry タイプが構造面でどのように異なるかの例を見てみましょう。以下は SQLite データベース内で Esri の ST_Geometry タイプを使って作成した4つのジオメトリの画像とコードです。それぞれのジオメトリには ST_Geometry と ArcGIS の両方のジオメトリタイプ属性があります。<\/P><\/P><\/P><\/P>import<\/SPAN> arcpyimport<\/SPAN> osimport<\/SPAN> sqlite3from<\/SPAN> itertools import<\/SPAN> chain# Define geometry samples<\/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))"<\/> )]# Define SQLite database initialization parameters<\/> sqlitedb =<\/> r\"D:\tmp\test.sqlite\" # path to SQLite DBst_geometry_dll =<\/> r\"DatabaseSupport\\SQLite\\Windows32\\stgeometry_sqlite.dll\"st_geometry_dll =<\/> os.path.join(arcpy.GetInstallInfo()[\ (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> for<\/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> for<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># SQLiteデータベースを作成し、テーブルを設定する<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/span>Connection(sqlitedb)conn.enable_load_extension(True)cur = conn.cursor()for sql in chain(*sql_stmts): cur.execute(sql)conn.commit()del cur, conn# ArcGISのジオメトリタイプを入力するfor table, geom_type, WKT in geoms: with arcpy.da.UpdateCursor( os.path.join(sqlitedb, table), ["shape@", "arcgis_type"] ) as cur: for shape, _ in cur: cur.updateRow([shape, shape.type])del curArcGISには単一のpolyline</ span > ジオメトリタイプがありますが、ST_GeometryにはST_LINESTRING</ span > とST_MULTILINESTRING</ span > タイプがあります。ArcGISには単一のpolygon</ span > ジオメトリタイプがありますが、ST_GeometryにはST_POLYGON</ span > とST_MULTIPOLYGON</ span > タイプがあります。ArcGISにはpoint</ span > とmultipoint</ span > がありますが、polylineとpolygonではmulti-プレフィックスはありません。もしST_Geometryタイプがオープンスタンダードで作業する人に馴染みがあるように見えるなら、それは偶然ではありません。 How is ST_Geometry implemented?—Help | ArcGIS Desktop のドキュメントは複数の場所で、ST_Geometryは「空間データへのISOおよびOGC準拠のSQLアクセスを含む高性能ストレージタイプ」であると述べています。 ジオメトリに関してはいくつかのISOおよびOGC標準があり、「空間データへのSQLアクセス」という部分は実際には重要な限定条件です。
私は、意味論が人生のあらゆる側面で重要だと信じています。法律、医療、科学、ビジネス、情報技術、またはその他のどんな分野であっても、共通の言語があっても、その言語を構成する単語の共通理解がなければあまり役に立ちません。言語は進化するため、時間をかけて単語の共通理解を維持することは継続的な課題です。<\/P><\/BLOCKQUOTE><\/P>理想的には、共通理解とは単語や用語が単一の意味を持ち、その単一の意味がその単語や用語を使うすべての人に知られ理解されていることを意味します。残念ながら現実は常に理想的ではなく、時には単語や用語の文脈がその意味に大きく影響します。例えば、「large-scale」という用語が地図に適用される場合は、行動、出来事、典型的な物体に適用される場合とは直感に反するように見えることがあります。地図の縮尺は地図上の距離と地上の距離の比率、すなわち地図内のデータ表現に適用されることを理解すると、「large-scale」地図が大きな地理的領域ではなく小さな地理的領域をカバーする理由が説明できます。確かに、大きな媒体に印刷された場合は大規模な地図が大きな地理的領域をカバーすることもありますが、ここでは一般的な印刷サイズを想定しています。<\/EM><\/P><\/P>地図からジオメトリへ移ると、
私は、意味論が人生のあらゆる側面で重要だと信じています。法律、医療、科学、ビジネス、情報技術、またはその他のどんな分野であっても、共通の言語があっても、その言語を構成する単語の共通理解がなければあまり役に立ちません。言語は進化するため、時間をかけて単語の共通理解を維持することは継続的な課題です。<\/P><\/BLOCKQUOTE>
<\/P>
理想的には、共通理解とは単語や用語が単一の意味を持ち、その単一の意味がその単語や用語を使うすべての人に知られ理解されていることを意味します。残念ながら現実は常に理想的ではなく、時には単語や用語の文脈がその意味に大きく影響します。例えば、「large-scale」という用語が地図に適用される場合は、行動、出来事、典型的な物体に適用される場合とは直感に反するように見えることがあります。地図の縮尺は地図上の距離と地上の距離の比率、すなわち地図内のデータ表現に適用されることを理解すると、「large-scale」地図が大きな地理的領域ではなく小さな地理的領域をカバーする理由が説明できます。確かに、大きな媒体に印刷された場合は大規模な地図が大きな地理的領域をカバーすることもありますが、ここでは一般的な印刷サイズを想定しています。<\/EM><\/P><\/P>地図からジオメトリへ移ると、
ジオメトリ同士の関係だけでなく、ジオメトリやジオメトリタイプの構造を理解するためにも異なる文脈があります。Esri の現世代 ArcGIS
import<\/SPAN> arcpyimport<\/SPAN> osimport<\/SPAN> sqlite3from<\/SPAN> itertools import<\/SPAN> chain# Define geometry samples<\/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))"<\/> )]# Define SQLite database initialization parameters<\/> sqlitedb =<\/> r\"D:\tmp\test.sqlite\" # path to SQLite DBst_geometry_dll =<\/> r\"DatabaseSupport\\SQLite\\Windows32\\stgeometry_sqlite.dll\"st_geometry_dll =<\/> os.path.join(arcpy.GetInstallInfo()[\ (<\/SPAN>"INSERT INTO %s "<\/SPAN> "(geom) VALUES (st_geometry('%s', %s));"<\/SPAN> %<\/SPAN> (<\/SPAN>table,<\/SPAN> WKT,<\/SPAN> PCSCode)<\/SPAN>)<\/SPAN> for<\/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> for<\/SPAN> table,<\/SPAN> geom_type,<\/SPAN> WKT in<\/SPAN> geoms ]<\/SPAN>]<\/SPAN># SQLiteデータベースを作成し、テーブルを設定する<\/SPAN>arcpy.<\/SPAN>CreateSQLiteDatabase_management(<\/SPAN>sqlitedb,<\/SPAN> "ST_GEOMETRY"<\/SPAN>)<\/SPAN>conn =<\/SPAN> sqlite3.<\/span>Connection(sqlitedb)conn.enable_load_extension(True)cur = conn.cursor()for sql in chain(*sql_stmts): cur.execute(sql)conn.commit()del cur, conn# ArcGISのジオメトリタイプを入力するfor table, geom_type, WKT in geoms: with arcpy.da.UpdateCursor( os.path.join(sqlitedb, table), ["shape@", "arcgis_type"] ) as cur: for shape, _ in cur: cur.updateRow([shape, shape.type])del curArcGISには単一のpolyline</ span > ジオメトリタイプがありますが、ST_GeometryにはST_LINESTRING</ span > とST_MULTILINESTRING</ span > タイプがあります。ArcGISには単一のpolygon</ span > ジオメトリタイプがありますが、ST_GeometryにはST_POLYGON</ span > とST_MULTIPOLYGON</ span > タイプがあります。ArcGISにはpoint</ span > とmultipoint</ span > がありますが、polylineとpolygonではmulti-プレフィックスはありません。もしST_Geometryタイプがオープンスタンダードで作業する人に馴染みがあるように見えるなら、それは偶然ではありません。
ISOおよびOGC準拠は、MicrosoftのSTGeometry、OracleのSDO_GEOM、PostGIS/PostgreSQL ST_Geometryなど、さまざまなジオメトリモデルやストレージタイプにわたってかなり広範です。 OGC/OpenGISジオメトリオブジェクトモデルはOpenGIS® Implementation Standard for Geographic information - Simple feature access - Part 1: Common architecture に記載されています。 ジオメトリクラス階層図を埋め込んだりすべてのジオメトリタイプを列挙したりする代わりに、私はここで共有します は LineString と MultiLineString タイプ、および Polygon と MultiPolygon タイプです。<\/P>
これらすべては一つのポイントに繋がります。そして、はい、私にはポイントがあります。ArcGIS の polyline と polygon タイプは基本的にマルチタイプですが、マルチ接頭辞が欠けているだけです。さらに悪いことに、ほとんどの ArcGIS ドキュメントはユーザーを ArcGIS の Geometry Object Model の構造からさらに抽象化しています。ポリラインがパスを持ち、ポリゴンがリングを持つ代わりに(実際には持っています)、すべてが単に「parts」を持っています。この「parts」の問題については /blogs/tilting/2016/02/20/the-single-multipart-polygons-with-interior-boundaries で触れています:<\/P>
ArcPy Geometry クラスの問題点の一つは、Esri が複数の特定のジオメトリコンポーネントを単一の一般的なもの、「part」に置き換えたことです。ジオメトリやリングを parts で抽象化することで、地理空間の標準や規範から逸脱しただけでなく、見世物的なマルチパート単一パートポリゴンを作り出しました。<\/SPAN><\/BLOCKQUOTE><\/P>接頭辞が欠けているか ubiquitous part があるかに関わらず、ArcGIS Geometry Object Model の実装とドキュメントのニュアンスを理解することは、ArcPy を含む ArcGIS ソフトウェアが他のジオメトリタイプとどのように相互作用するかを理解する助けになります。<\/SPAN><\/P><\/BODY><\/HTML>
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.