[sql-server] SQL Server에서 좌표 (Google지도의 경도 / 위도)를 저장하는 가장 좋은 방법은 무엇입니까?

사용자 목록과 Google지도 좌표 (경도 및 위도)를 저장할 테이블을 SQL Server 2008에서 디자인하고 있습니다.

두 개의 필드가 필요합니까, 아니면 1로 할 수 있습니까?

이러한 종류의 데이터를 저장하는 데 가장 적합한 (또는 가장 일반적인) 데이터 유형은 무엇입니까?



답변

SQL Server 2008에 도입 된 새로운 공간 데이터 유형을 살펴보십시오. 이러한 유형의 작업을 위해 설계되었으며 인덱싱 및 쿼리를 훨씬 쉽고 효율적으로 수행 할 수 있습니다.

추가 정보:


답변

공정한 경고! GEOGRAPHY 유형을 사용하라는 조언을 받기 전에 Linq 또는 Entity Framework를 사용하여 데이터에 액세스 할 계획이 없는지 확인하십시오. 2010 년 11 월 현재 지원되지 않으므로 슬프게 될 것입니다!

2017 년 7 월 업데이트

지금이 답변을 읽는 사람들에게는 백 데이트 기술 스택을 참조하므로 더 이상 사용되지 않습니다. 자세한 내용은 주석을 참조하십시오.


답변

SQL Server에 대한 답은 모르지만 …

에서 의 MySQL 을로 저장FLOAT( 10, 6 )

이것은 Google 개발자 문서 의 공식 권장 사항입니다 .

CREATE TABLE `coords` (
  `lat` FLOAT( 10, 6 ) NOT NULL ,
  `lng` FLOAT( 10, 6 ) NOT NULL ,
) ENGINE = MYISAM ;


답변

내가하는 방법 : 위도경도를 저장 한 다음 첫 번째 두 열의 자동 파생 지리 유형 인 세 번째 열이 있습니다. 표는 다음과 같습니다.

CREATE TABLE [dbo].[Geopoint]
(
    [GeopointId] BIGINT NOT NULL PRIMARY KEY IDENTITY,
    [Latitude] float NOT NULL,
    [Longitude] float NOT NULL,
    [ts] ROWVERSION NOT NULL,
    [GeographyPoint]  AS ([geography]::STGeomFromText(((('POINT('+CONVERT([varchar](20),[Longitude]))+' ')+CONVERT([varchar](20),[Latitude]))+')',(4326)))
)

이는 geoPoint 열에 대한 공간 쿼리의 유연성을 제공하며 csv 목적으로 표시하거나 추출하기 위해 필요에 따라 위도 및 경도 값을 검색 할 수도 있습니다.


답변

나는 “여기에 새로운 유형이있다, 그것을 사용하자”라고 말하는 사람들과 반대되는 것이 싫다. 새로운 SQL Server 2008 공간 유형에는 몇 가지 장점, 즉 효율성이 있지만 항상 해당 유형을 사용한다고 맹목적으로 말할 수는 없습니다. 그것은 실제로 더 큰 그림 문제에 달려 있습니다.

예를 들어 통합입니다. 이 유형은 .Net에서 동등한 유형을 가지고 있지만 interop은 어떻습니까? .Net의 이전 버전을 지원하거나 확장하는 것은 어떻습니까? 이 유형을 서비스 계층 전체에서 다른 플랫폼에 노출하는 것은 어떻습니까? 데이터 정규화는 어떻습니까-아마도 당신은 위도 또는 경도 독립형 정보에 관심이있을 것입니다. long / lat을 처리하는 복잡한 비즈니스 로직을 이미 작성했을 것입니다.

공간 유형을 사용해서는 안된다는 것이 아닙니다. 많은 경우에 사용해야합니다. 그 길을 가기 전에 좀 더 중요한 질문을해야한다고 말하는 것입니다. 귀하의 질문에 가장 정확하게 대답하려면 귀하의 특정 상황에 대해 더 많이 알아야합니다.

long / lat을 별도로 저장하거나 공간 유형으로 저장하는 것은 모두 실행 가능한 솔루션이며 자신의 상황에 따라 하나가 다른 것보다 선호 될 수 있습니다.


답변

원하는 것은 위도와 경도를 새로운 SQL2008 Spatial 유형-> GEOGRAPHY로 저장하는 것입니다.

여기 제가 가지고있는 테이블의 스크린 샷이 있습니다.

대체 텍스트 http://img20.imageshack.us/img20/6839/zipcodetable.png

이 테이블에는 지리 데이터를 저장하는 두 개의 필드가 있습니다.

  • 경계 : 우편 번호 경계인 다각형입니다.
  • CentrePoint :이 다각형의 시각적 중간 지점을 나타내는 위도 / 경도 지점입니다.

GEOGRAPHY 유형으로 데이터베이스에 저장하려는 주된 이유는 모든 SPATIAL 메소드를 활용할 수 있기 때문입니다. Point in Poly, 두 점 사이의 거리 등

BTW, 우리는 또한 Google의 Maps API를 사용하여 위도 / 경도 데이터를 검색하고 Sql 2008 DB에 저장하므로이 방법이 작동합니다.


답변

SQL Server는 공간 관련 정보를 지원합니다. http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx 에서 자세한 내용을 볼 수 있습니다 .

또는 정보를 두 개의 기본 필드로 저장할 수 있습니다. 일반적으로 부동 소수점은 대부분의 장치에서보고하는 표준 데이터 유형이며 Google지도에 적합한 것보다 1 ~ 2 인치 이내로 정확합니다.