私は現在使用しています
X_Coord =CASE WHEN shape.STDimension() = 2 THEN shape.STCentroid().STX ELSE shape.STEnvelope().STCentroid().STX END,
Y_Coord =CASE WHEN shape.STDimension() = 2 THEN shape.STCentroid().STY ELSE shape.STEnvelope().STCentroid().STY END,
ポリゴンジオメトリテーブルのX列とY列にデータを入力します。ただし、ロケーションテーブルにもデータを入力したいと思います。たとえば、ポリゴンの図心がどの地形図の境界内にあるかなどです。
これ
LEFT OUTER JOIN atbi.dbo.TLU_TOPO_BOUNDS AS b
ON b.Shape.STContains(a.Shape) = 1
ポイントジオメトリでは正常に機能しますが、2つの理由でポリゴンでは失敗します。別のポリゴンが「範囲内」にあるかどうかを判断するのが難しい場合が多く、理由#1、理由#2は致命的なエラーです。
では、ポリゴン重心を使用して、挿入されたポリゴン重心が含まれる別のポリゴンジオメトリテーブルから対応するポリゴンを特定して、同じ結果を得るにはどうすればよいでしょうか。
私がここで行っていることの完全なコード:
ALTER TRIGGER [dbo].[GRSM_WETLAND_POLY_GIS_Location_ID]
ON [dbo].[GRSM_WETLANDS_POLY]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.GRSM_WETLANDs_POLY(
OBJECTID, MapMethod, HError, MapSource, SourceDate,
EditDate, Notes, Meta_MID, X_Coord, Y_Coord, Coord_Units,
Coord_System, UTM_Zone, Accuracy_Notes, Unit_Code, Loc_Name,
Loc_Notes, Datum, Watershed, StreamName, NHDReachCode, Trail,
Road, Elevation, LAT, LON, Year_, County, ST, IsExtant, IsSenstive,
LocationDescription, LocationDirections, PlaceName, FCSubtype,
Landform, Area_Acres, Area_Hectares, DataFile, DataDictionary,
Max_PDOP, Max_HDOP, Corr_Type, Rcvr_Type, SHAPE, QuadName
)
SELECT
a.OBJECTID, a.MapMethod, a.HError, a.MapSource, a.SourceDate,
a.EditDate, a.Notes, a.Meta_MID, a.X_Coord, a.Y_Coord, a.Coord_Units,
a.Coord_System, a.UTM_Zone, a.Accuracy_Notes, a.Unit_Code, a.Loc_Name,
a.Loc_Notes, a.Datum, a.Watershed, a.StreamName, a.NHDReachCode, a.Trail,
a.Road, a.Elevation, a.LAT, a.LON, a.Year_, a.County, a.ST, a.IsExtant, a.IsSenstive,
a.LocationDescription, a.LocationDirections, a.PlaceName, a.FCSubtype,
a.Landform, a.Area_Acres, a.Area_Hectares, a.DataFile, a.DataDictionary,
a.Max_PDOP, a.Max_HDOP, a.Corr_Type, a.Rcvr_Type, a.SHAPE, a.QuadName
From
(
SELECT
OBJECTID, MapMethod, HError, MapSource, SourceDate,
EditDate, Notes, Meta_MID,
X_Coord =CASE WHEN shape.STDimension() = 2 THEN shape.STCentroid().STX ELSE shape.STEnvelope().STCentroid().STX END,
Y_Coord =CASE WHEN shape.STDimension() = 2 THEN shape.STCentroid().STY ELSE shape.STEnvelope().STCentroid().STY END,
Coord_Units,
Coord_System, UTM_Zone, Accuracy_Notes, Unit_Code, Loc_Name,
Loc_Notes, Datum, Watershed, StreamName, NHDReachCode, Trail,
Road, Elevation, LAT, LON, Year_, County, ST, IsExtant, IsSenstive,
LocationDescription, LocationDirections, PlaceName, FCSubtype,
Landform, Area_Acres, Area_Hectares, DataFile, DataDictionary,
Max_PDOP, Max_HDOP, Corr_Type, Rcvr_Type, SHAPE,QuadName
FROM inserted
) AS a
--Not working:
---spatial query, what topo quad is this point in?
--LEFT OUTER JOIN atbi.dbo.TLU_TOPO_BOUNDS AS b
--ON b.Shape.STContains(a.Shape) = 1 ;
end
GO
トリガーの残りの部分について質問する必要がある場合、これはESRI SDEスタックの最上位にあるため、必須のobjectidを処理する必要がある場合、単純なトリガーである必要がありますが複雑になりますが、他のすべては機能しています。重心STwithinを把握します。ありがとう!