1

私は現在使用しています

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を把握します。ありがとう!

4

0 に答える 0