위도 및 경도에 대한 데이터 유형은 무엇입니까?
저는 포스트그레의 신입생입니다.SQL 및 PostGIS.위도 및 경도 값을 Postgre에 저장하려고 합니다.SQL 9.1.1 데이터베이스 테이블.두 점 사이의 거리를 계산하고 이 위치 값을 사용하여 더 가까운 점을 찾습니다.
위도 및 경도에 대해 어떤 데이터 유형을 사용해야 합니까?
데이터 유형 - 결합을 사용할 수 있습니다.(x,y)
당신의 lat/long일 수 있습니다.: 2float8
내부 번호
또는 두 개의 유형 열(=)로 만듭니다.float8
또는double precision
각각 8바이트입니다.
또는 (=)float4
) 하지 않은 추가 정밀도가 필요하지 않은 경우.4바이트씩.
아니면 절대적인 정확성이 필요하더라도 말입니다.4자리 그룹당 2바이트, 오버헤드 3~8바이트 추가.
숫자 유형 및 기하학적 유형에 대한 자세한 설명서를 읽으십시오.
및 데이터 유형은 추가 모듈에 의해 제공됩니다. 포스트GIS를 사용하여 테이블에서 하나의 열을 차지합니다.각 점은 32바이트를 차지합니다.거기에는 SRID와 같은 추가적인 오버헤드가 있습니다.이러한 유형은 저장(long/long)이 아니라 저장(long/lat)됩니다.
PostGIS에는 위도 및 경도가 있는 점에 대한 지리 데이터 유형이 있습니다.
열을 추가하는 방법
alter table your_table add column geog geography;
데이터 삽입하기
insert into your_table (geog) values ('SRID=4326;POINT(longitude latitude)');
4326은 GPS와 마찬가지로 경도와 위도의 데이터를 나타내는 Spatial Reference ID입니다.더 자세한 정보: http://epsg.io/4326
순서는 경도, 위도 - 지도로 표시하면 (x, y)입니다.
가장 가까운 점을 찾으려면 먼저 공간 인덱스를 작성해야 합니다.
create index on your_table using gist (geog);
그런 다음 주어진 지점에 가장 가까운 5를 요청합니다.
select *
from your_table
order by geog <-> 'SRID=4326;POINT(lon lat)'
limit 5;
저는 포스트지스를 강력히 지지합니다.이러한 데이터 유형에 특화되어 있으며 점 간 거리를 계산하는 즉시 사용 가능한 방법이 있으며, 향후 유용하다고 생각할 수 있는 다른 GIS 작업 중에서도
모든 기능이 필요하지 않은 경우 게시GIS는 지구 거리라는 확장 모듈을 제공합니다.거리 계산에 필요한 정확도에 따라 또는 데이터 유형을 사용합니다.
그러면 다음을 사용할 수 있습니다.earth_box()
예를 들어, 위치의 특정 거리 내에 있는 점을 쿼리하는 기능입니다.
PostGIS에서 지오메트리는 계산이 훨씬 간단하여 더 빠르기 때문에 지리(원형 접지 모델)보다 선호됩니다.또한 더 많은 기능을 사용할 수 있지만 매우 먼 거리에서는 정확도가 떨어집니다.
CSV long 및 lat 필드를 다음으로 가져옵니다.DECIMAL(10,6)
열6자리 숫자는 10cm 정밀도이며, 대부분의 사용 사례에 충분할 것입니다.그런 다음 가져온 데이터를 올바른 SRID에 캐스트합니다.
길을 잘못 들었어요!
/* try what seems the obvious solution */
DROP TABLE IF EXISTS public.test_geom_bad;
-- Big Ben, London
SELECT ST_SetSRID(ST_MakePoint(-0.116773, 51.510357),4326) AS geom
INTO public.test_geom_bad;
올바른 방법
/* add the necessary CAST to make it work */
DROP TABLE IF EXISTS public.test_geom_correct;
SELECT ST_SetSRID(ST_MakePoint(-0.116773, 51.510357),4326)::geometry(Geometry, 4326) AS geom
INTO public.test_geom_correct;
SRID가 0이 아닌지 확인합니다!
/* now observe the incorrect SRID 0 */
SELECT * FROM public.geometry_columns
WHERE f_table_name IN ('test_geom_bad','test_geom_correct');
WKT 뷰어를 사용하여 long lat 매개 변수의 순서를 확인합니다.
SELECT ST_AsEWKT(geom) FROM public.test_geom_correct
최상의 성능을 위해 인덱스를 수행합니다.
CREATE INDEX idx_target_table_geom_gist
ON target_table USING gist(geom);
점 데이터 유형을 사용하여 경도 및 위도를 단일 열에 저장합니다.
CREATE TABLE table_name (
id integer NOT NULL,
name text NOT NULL,
location point NOT NULL,
created_on timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT table_name_pkey PRIMARY KEY (id)
)
'위치' 열에 인덱싱 생성:
CREATE INDEX ON table_name USING GIST(location);
GiST 인덱스는 "가장 가까운 이웃" 검색을 최적화할 수 있습니다.
SELECT * FROM table_name ORDER BY location <-> point '(-74.013, 40.711)' LIMIT 10;
참고: 점 첫 번째 요소는 경도이고 두 번째 요소는 위도입니다.
자세한 내용은 이 연산자 쿼리를 확인하십시오.
완전성을 위해: Postgre에서 사용할 수 있는 복합 유형 열을 사용할 수 있습니다.SQL 11.
열을 작성하는 방법
CREATE TYPE geo AS (lat float, long float);
ALTER TABLE your_table ADD COLUMN location geo;
데이터 삽입 방법(옵션):
-- with field names
INSERT INTO your_table (location.lat, location.long) VALUES (8.12345, -55.34567);
-- string syntax
INSERT INTO your_table (location) VALUES ('(8.12345, -55.34567)');
-- ROW() keyword
INSERT INTO your_table (location) VALUES (ROW(8.12345, -55.34567));
-- ROW() keyword is optional for multi-column composite types
INSERT INTO your_table (location) VALUES ((8.12345, -55.34567));
복합 유형은 "테이블의 테이블"과 같아서 바람직하지 않은 경우가 많습니다.하지만 이 경우에는 (약간의) 이점을 제공한다고 생각합니다.
점과 마찬가지로 단일 열에서 지리적 위치를 인코딩할 수 있지만, 필요한 정밀도에 따라 구성요소 데이터 유형을 선택할 수 있다는 추가적인 이점이 있습니다.
real
,float
,numeric
).일반적인 "lat, long" 순서의 좌표를 사용할 수 있습니다. 지리적 위치 값에 대해 점을 사용할 때는 Postgre와의 일치를 위해 "long, lat"로 가는 것이 좋습니다.SQL 연습. 여러 함수는 다음과 같이 예상합니다.
"경도는 x축의 직관적인 개념에 가깝고 위도는 y축에 가깝기 때문에 점은 (경도, 위도)로 간주되지 않고 그 반대로 간주됩니다."
INSERT의 필드 이름을 참조하는 기능으로 형식이 (lat, long, lat) 또는 (long, lat)인 경우 혼동을 방지합니다.
중량 포스트에 대한 종속성 없음GIS(지구 거리 모듈), 특히 운영자
<@>
"점 기반 지구 거리"의 경우에도 근접 검색에 사용할 수 있습니다. (다른 데이터 유형을 사용하기 때문에 즉시 점을 생성하고 (긴, 긴) 순서를 반대로 설정해야 합니다.)
언급URL : https://stackoverflow.com/questions/8150721/which-data-type-for-latitude-and-longitude
'programing' 카테고리의 다른 글
동일한 필드의 mongo 문서를 찾는 방법 (0) | 2023.05.02 |
---|---|
두 LIST의 값 합계를 새 LIST에 추가 (0) | 2023.05.02 |
이클립스에서 실행 중인 프로그램을 중지하는 방법은 무엇입니까? (0) | 2023.05.02 |
<...>라는 이름> 네임스페이스 clr-message <...> (0) | 2023.05.02 |
Xcode 프로젝트에 대한 Git ignore 파일 (0) | 2023.05.02 |