저는 SQL Server 2008을 처음 사용하며 제 질문을 이해하기를 바랍니다.

따라서 데이터베이스 (공간)에 3 개의 필드 (Name, Lat 및 Long)가 포함 된 테이블이 있습니다. 이러한 필드 (Lat 및 Lat 및 Long)를 기반으로 지오메트리 / 지리 열을 만들고 싶습니다. 길지만 안타깝게도 성공하지 못했습니다.

제 질문은 어떻게 할 수 있습니까?

댓글

답변

다음과 같이 계산 된 열을 추가 할 수 있습니다.

alter table yourTable add geographyColumn as geography::STGeomFromText("POINT("+convert(varchar(20),Long)+" "+convert(varchar(20),Lat)+")",4326) 

Long 및 Lats를 숫자로 저장하기 때문에 lng 또는 lat에서 변환을 추가했습니다.

댓글

  • 답변 해 주셔서 감사합니다. 이 줄을 사용하여 내 문제를 해결하려면 : UPDATE yourdatabase SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
  • 이에 대한 트리거를 만들 수 있습니까? 정보로 필드 (X 및 Y 열)를 채울 때와 마찬가지로 위에서 언급 한 스크립트가 실행됩니다.

Answer

SQL 메서드 :

DECLARE @g geography; SET @g = geography::STGeomFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

또는

DECLARE @g geography; SET @g = geography::STPointFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

Geometry 또는 Geography 필드를 만든 다음 SQL을 사용하여 위도 / 경도 값을 사용하여 해당 필드를 채 웁니다.

댓글

  • 대신 다음 방법을 사용할 때의 차이점은 무엇입니까? DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo-네, 원하는 경우 실제로 사용할 수 있습니다.

답변

SQL Server 2012

이렇게 할 수 있습니다.

SELECT geography::Point(lat, long, 4326) 

자세한 내용은 데이터베이스 관리자에 대한 저의 게시물, “SQL 서버 포인트 생성자 또는 ST_Point (x, y) 버전? “

댓글

는 x, y 인수를 취한 다음 geography::Point(long, lat, 4326)와 같이 순서를 전환 할 수 있습니다. 경도는 x이고 위도는 y입니다.

답변

CONVERT(VARCHAR, 문을 사용할 때 원래 Long / Lat 값의 반올림이 발생하는 경우

다음을 사용해보세요.

GeoData = geometry:: STGeomFromText("POINT(" + CAST(CAST(X AS decimal(13, 2)) AS varchar) + " " + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ")", 4326) 

댓글

  • 이 방법은 위치 정확도를 잃는 것과 관련이 있으므로이 방법을 사용하는 것이 염려됩니다.