2015-02-05 3 views
0

x 포인트로 정의 된 영역이 주어지면 해당 영역을 3 마일 블록으로 분할하고 각 블록에서 중심 위도 경도를 검색하고 싶습니다.지역에 주어진 x 거리 내의 모든 위도 경도 포인트 검색

지역은 런던을 포함 :

지역 3 개 마일 블록 (완벽하지)에 분할 : 다음

및 위도 경도를 인쇄 여기 내 말은 무엇 각 블록 센터의 이것은 런던 지역을 포함하는 모든 위도 경도 포인트 (3mi 이내)를 제공합니다.

어떤 크기의 영역이라도 프로그램 적으로이 작업을 수행해야하지만 불행히도 어디서부터 시작해야할지 몰라. 수학은 내게 가장 강한 주제가 아니며 나는 지리적으로 많은 일을하지 않았다. 나는 Universal Transverse Mercator coordinate system이 나를 도울 수 있다고 생각하지만 다시 어디서부터 시작해야할지 모르겠다.

+0

그리드의 시작점이 얼마나 정확해야합니까? –

+0

@ JohnBarça 100 % 일 필요는 없지만 최대한 정확하게 작성해야합니다. 어디서든 시작할 수 있습니다. – eth0

+0

죄송합니다. 약간 긴 대답입니다. 그것이 도움이되기를 바랍니다. 나는 비극적 인 계획에 대해 이야기하기 시작할 때 스스로를 도울 수 없습니다. –

답변

2

당신은 실제로 즉 PostGIS와의 단일 SQL 쿼리로이 작업을 수행 할 수 있습니다

SELECT 
    ST_AsText(ST_Transform(ST_SetSrid(ST_MakePoint(
    500000 + x * 4828.03, 155000 + y * 4828.03), 27700), 4326)) 
FROM 
    generate_series(0, 12) x, 
    generate_series(0, 10) y; 

일부 설명이 순서입니다 :

  1. 사용 포스트 그레스의에서 그리드를 만들 generate_series function을 매우 유용 모두 x 및 y 방향
  2. 생성 된 x 및 y 값을 ST_MakePoint으로 전달하여 눈금을 만듭니다. 계산을 돕기 위해 투영 된 미터 단위의 British National Grid을 사용했습니다. M25가 포함 된 경계 상자의 왼쪽 아래 모서리는 대략 (500000, 155000)이므로 앵커 지점으로 사용했습니다. 오른쪽 상단은 대략 (560000, 205000), 즉 60 x 50 킬로미터입니다. 3 마일은 4828.03 미터이며 ST_MakePoint의 각 반복에서 오프셋을 설명합니다. generate_series의 한계는 M28의 테두리 상자의 너비/높이에 맞는 4828.03 미터의 횟수 인 0에서 시작하여 12 및 10 또는 13 및 11 증분입니다.
  3. 사용 ST_SetSRID는이 좌표가이 공간 참조 ID (SRID)는 4326
  4. 로의로 알려져있다/경도를, 위도로 변환하기 위해 사용 ST_Transform 27700.
  5. 로 알려진 영국 내셔널 그리드,에 있다는 것을 PostGIS와 얘기하기
  6. ST_AsText은 기본 지오메트리의 텍스트 표현을 제공합니다. 이것을 제거하여 원시 지오메트리를 얻습니다. 예를 들어, 실제로 테이블을 만들어 지오메트리로 점을 저장하려는 경우입니다.

영국 국립 그리드 (27700)를 사용하여 3 마일 그리드를 작성한 다음 위도/경도로 변환했습니다. 위의 작업은 런던에서 lat와 lon에 대략 3 마일을 계산하고 동일한 generate_series를 두 번 수행하지만 직접 4326을 사용하여 ST_Transform을 건너 뛰는 방식으로 직접 수행 할 수 있습니다. 이 문제는 북/남으로 갈 때 위도가 1 분 정도 변경된다는 것입니다. 영국 국립 그리드는 지구 모양의 기본 모델 (지오이드)로 설계되었으며, 이는 영국에 특히 적합하며 GPS 위성에서 사용되는 WGS84와 동일하지 않습니다. 따라서 계기판을 미터로 사용하고 위도/경도로 변환하면 위도/경도를 직접 사용하는 것보다 더 규칙적인 왜곡이 발생하며 북/남으로 이동하면 눈금이 바뀝니다.실제로 원자력 발전소를 건설하지 않는 한 런던 크기의 지역에서는 다음을 모두 무시할 수 있습니다. D

Google지도에서 사용하는 투영법 인 구형 메르카토르 (3857) 및 기타)를 미터로 표시합니다. 3857에서 4326을 사용하여 위의 절차를 사용할 수도 있지만,이 프로젝션은 북쪽으로 갈수록 증가하는 스케일 왜곡을 유지하는 반면, 가로 메르카토르를 기반으로하는 영국의 그리드는 일정한 스케일의 북쪽/남쪽을 가지고 있으며,/웨스트. Google지도 또는 이와 유사한 점을 플롯하려면이 방법이 적합 할 수 있습니다. 3857에서 시작점을 알아 내기 위해 연습으로 남겨 둡니다 (힌트는 ST_Transform을 사용합니다).

+0

와우, 나는 그렇게 쉽게 믿을 수 없다! 놀랄 만한. 고맙습니다! – eth0

+0

일단 방법을 알기 만하면 쉽게 알 수 있습니다. 그러나 그렇지 않은 경우 약간의 분명한 사실이 있습니다. D 좌표계는 이해하기가 어려울 수 있습니다. –

+0

나는 M25의 최소 경계 사각형 인 사각형 안에 3 마일 그리드의 모든 포인트를 줄 것이다. M25 외부의 점을 mbr에서 제외 시키려면 입력 기하학에 ST_Intersects를 사용할 수 있습니다. 네가 원한다면 나는 이것을 쓸 수있다. –

관련 문제