景色をめちゃくちゃにして、頭を混乱させる。これをやって、あれはやるな、<\/SPAN>LINE を読めないのか? <\/SPAN>Hey Neighbor? What's Your Value? <\/A>、Rasters, Pixels and Code Oh My!,<\/A>、そして Using SQL to Auto-Populate XY Values<\/A> では、データ入力を自動化するためのいくつかの SQL トリックを紹介しました。おそらくこれらの方法は主にポイントに対してのみ機能することを言及すべきでした....<\/P><\/P>私たちの GIS データ標準では、道路、トレイル、およびその他の線状フィーチャのようなラインタイプに対しても同じ管理値と自動化を収集したいと考えています。問題は、ライン上に多くの頂点(ノード、座標ペア)があり、その中でどれを SQL トリックに使うべきかということです。<\/P><\/P>Geography ラインインスタンスから well-known-text を操作するための既存の SQL Geography メソッドはいくつかありますが、そのどれも中間点の値を返さず、トリガーの一部として使うには適していません。<\/P><\/P>Geography から簡単にラインの中間点の値を取得するには、SQL Server Spatial Tools - Home<\/A> をインストールする必要があります。これはデータベースインスタンス上で DLL を登録するだけで簡単にでき、2008 と 2012 で動作します。<\/P><\/P>ラインの中間点は次のようにクエリできます:<\/P><\/P>SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Lat FROM [dbo].[SOMELINE<\/SPAN>]SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Long FROM [dbo].[SOMELINE<\/SPAN>]<\/PRE><\/P>これをトリガーにまとめて LAT、LON、および Elevation フィールドを自動入力すると次のようになります:<\/P><\/P>CREATE TRIGGER [dbo].[SOMELINE_GEO]ON [dbo].[SOMELINE<\/SPAN>]AFTER INSERT, UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET LON = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LON ELSE p.SHAPE.Long END, LAT = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LAT ELSE p.SHAPE.Lat END,ELEVATION = (SELECTpdata.getValueByLoc(1,p.SHAPE.Long,p.SHAPE.Lat) FROM [dbo].[DEM10MP]) FROM dbo.SOMELINE AS p INNER JOIN inserted AS i ON i.GlobalID = p.GlobalID ENDGO<\/PRE><\/P>ポリゴンは「特別な関数」を必要とせず、単純に次のように中間点の値をクエリできます:<\/P><\/P>SELECT SHAPE.EnvelopeCenter().LatFROM [SOMEPOLYSELECT SHAPE.EnvelopeCenter().LongFROM [SOMEPOLY]<\/PRE><\/BODY><\/HTML>
<\/P>
私たちの GIS データ標準では、道路、トレイル、およびその他の線状フィーチャのようなラインタイプに対しても同じ管理値と自動化を収集したいと考えています。問題は、ライン上に多くの頂点(ノード、座標ペア)があり、その中でどれを SQL トリックに使うべきかということです。<\/P>
Geography ラインインスタンスから well-known-text を操作するための既存の SQL Geography メソッドはいくつかありますが、そのどれも中間点の値を返さず、トリガーの一部として使うには適していません。<\/P>
Geography から簡単にラインの中間点の値を取得するには、
ラインの中間点は次のようにクエリできます:<\/P>
SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Lat FROM [dbo].[SOMELINE<\/SPAN>]SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Long FROM [dbo].[SOMELINE<\/SPAN>]<\/PRE><\/P>これをトリガーにまとめて LAT、LON、および Elevation フィールドを自動入力すると次のようになります:<\/P><\/P>CREATE TRIGGER [dbo].[SOMELINE_GEO]ON [dbo].[SOMELINE<\/SPAN>]AFTER INSERT, UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET LON = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LON ELSE p.SHAPE.Long END, LAT = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LAT ELSE p.SHAPE.Lat END,ELEVATION = (SELECTpdata.getValueByLoc(1,p.SHAPE.Long,p.SHAPE.Lat) FROM [dbo].[DEM10MP]) FROM dbo.SOMELINE AS p INNER JOIN inserted AS i ON i.GlobalID = p.GlobalID ENDGO<\/PRE><\/P>ポリゴンは「特別な関数」を必要とせず、単純に次のように中間点の値をクエリできます:<\/P><\/P>SELECT SHAPE.EnvelopeCenter().LatFROM [SOMEPOLYSELECT SHAPE.EnvelopeCenter().LongFROM [SOMEPOLY]<\/PRE><\/BODY><\/HTML>
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.