2012-07-25 2 views
0

이 정보가있는 웹 서비스가 있지만 하루 요청으로 제한 될 수 있음을 알고 있습니다. 우편 번호가 필요한 약 114,000 개의 레코드가 있습니다. 거기에는 위도와 경도가있는 우편 번호로 가득 찬 데이터베이스가 있습니다. 그러나 나는 위도와 경도에 대해 위도와 경도를 어떻게 계산할 수 있는지 잘 모르겠습니다.위도 및 경도로 우편 번호 찾기

는 기본적으로 나는 참조 위도 긴 위도 긴 제공된 우편 번호에 대한 지정된 주소 교차 할 필요가있다. PHP, Java 또는 MySQL 프로 시저 또는 계산을 사용할 수 있습니다.

+1

* "기본적으로해야합니다 .."*. 질문을하십시오. 더 나은 방법은 구체적인 질문으로 만드십시오. –

+0

이것 좀 봐 ... http://www.hashbangcode.com/comment/2732 - 구글을 사용할 수 있지만 서비스 조건은지도를 보여줘야한다! – aserwin

+0

나는 서비스로서 http://www.geonames.org/을보고있다. 언급 한 바와 같이 API 호출에 제한이있어서 한 시간에 2000 건의 호출을 제한합니다. 우편 번호가 필요한 114,000 개의 레코드가 있습니다. 주어진 ZIP lat와 longs에서 이것을 계산할 수 있습니까? –

답변

1

나는이 경우, 그것에 대해 당신에게 디딤돌하지만, 그게 전부 제공 할 수 있습니다.

$distance = 10; 
$latitude = 37.295092; 
$longitude = -121.896490; 

$sql = "SELECT loc.*, (((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($longitude - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM table_with_lonlat_ref loc HAVING distance < $distance" 

당신은 당신이 가지고있는 두 테이블 사이에 가입하고 1 또는 2까지의 거리를 감소 않는 쿼리를 만드는 경우, 당신은 개념에 당신이 필요로하는 거의 모든 위도/경도 조합을 가지고 올 수 있습니다. 또는 미국 우편 번호가 모두있는 DB를 찾을 수도 있습니다.이 DB에는 위도/경도가 있고 일치하는 우편 번호를 기반으로 다른 테이블에 삽입 할 수있는 하나의 테이블에 대한 쿼리가 있습니다. 나는 어딘가에 그런 zipcode DB를 가지고있다.

도 나는 http://www.maxmind.com/app/geolite이 그것을 덜 싶어 지불을 완료하지 제안 할 수 있으며 그것은 모든 너무 자주하지만까지 변경합니다. 이것으로 방문자의 IP를 기준으로 참조 점으로 사용할 수있는 거의 모든 위도/경도 조합을 얻을 수 있습니다. IP가 허브 나 마을에서 스팀으로 튀어 나오는 경우가 있습니다. 무엇보다 좋은 점은 서버가 처리 할 수있는 제한 만 제공하며 maxmind의 사용 조건을 벗어난 API 제한에 대한 걱정이 없습니다.

어쨌든 모든 조합으로 인해이 조합을 여러 사이트에서 사용하고 있습니다. 그러나 현재까지 많은 문제를 가지고 올 수 있습니다. 그럼 난 당신의 질문에 해당되지 직접적인 답을 알고 있지만 이미 라트와 걷고 데이터베이스를 가지고 있기 때문에 나는 그것이 솔루션

+0

나는 위도와 경도로 이미 데이터베이스를 가지고있다. 나는 이것을 참조하기를 희망했다. 나는 SQL 코드를 시도하고 어떤 일이 일어날지를 보게 될 것이다. 다른 모든 시도가 실패하면 API 서비스를 사용하게됩니다.나는 단지 더 빠른 것을 기대하고 있었다. 그러나 API를 통해 이미 실행할 수있는 모든 것을 참조하는 방법을 찾은 후에 확신합니다. 나는 계속 너를 게시 할 것이다. –

+0

아무런 문제도 없었습니다. 지금 직장에 없었다면 더 많은 도움을 얻을 수 있었을 것입니다. 그러나 문제가 생기기 훨씬 전에 너무 늦을 수밖에 없습니다. – chris

+0

100 % 정확하지는 않지만 정상적으로 작동하지만 API를 통해이를 실행하는 것보다 빠릅니다. –

0

로 리드 희망, 나는에 갈거야 (latA, lonA)에서 (latB, lonB)까지의 일련의 직사각형 영역을 기술한다고 가정하고, 각 영역은 연관된 zi P 코드. 또한 네 개의 필드에 대해 색인을 생성했다고 가정합니다 (또는 권장).

귀하의 질의는 매우 쉽게 그 사각형을 설명하는 두 개의 범위 내에서 적합 (coordA, coordB) 좌표 여부를 일치시킬 수 있습니다.

update coords set zip_code=(
    select zip_code from zip_codes 
    where coords.coordA >= zip_codes.latA 
    and coords.coordA <= zip_codes.latB 
    and coords.coordB >= zip_codes.lonA 
    and coords.coordB <= zip_codes.lonB 
    limit 1 
) 

Caviat : 당신은 당신의 우편 번호 데이터베이스에 LATA < LATB 및 lonA < lonB, 그리고 같은이 두 테이블에 좌표계를 사용하고 있는지 확인 여부를 확인해야합니다. 전환을 통해 또는 운영자를 적절하게 변경하여 조정해야 할 수도 있습니다.

관련 문제