2009-10-25 5 views
2

내 앱에서 Google 지오 코딩 API를 사용하고 있지만 반환 된 주소 정보를 안정적으로 구문 분석하기가 어렵습니다. 누군가가 도서관이나 정보 분석 방법을 가지고 있기를 바란다. 나는이 자기 자신을 쓰지 않고 모든 사건을 다루지 않아야한다.구문 분석 Google 지오 코드

임 json api를 사용하여 주소 행과 좌표를 쉽게 추출 할 수 있으며 데이터베이스에 저장할 수 있지만 문제는 다른 주소 정보를 신뢰할 수있는 방식으로 추출하여 저장할 수 있습니다.

Google에서 지오 코딩 된 데이터에 사용하는 XAL 구조적 주소 사양을 살펴 봤지만 모든 문제가 모든 국가의 모든 주소 유형을 처리 할 수 ​​있다는 사실은 결과를 구문 분석하기가 어렵습니다.

단순한 우편 번호는 상위 태그의 조합 내부 깊숙이 중첩 될 수 있습니다. 한 나라 안에서도 나무가 나타나는 방식이 달라질 수 있기 때문에 파싱이 예상보다 어렵습니다.

역설적이게도 내 최종 목표는 내 데이터베이스에서 레일스 (acts_as_tree 또는 유사 레일)을 트리에 저장하여 사용자가 나중에 항목을 쉽게 찾을 수 있도록하는 것입니다. 나는이 몇 번 한 적이

답변

2

이 모든 것을 캡슐화 한 보석 및 플러그인이 있습니다. GeoKit이라고합니다.

Google 또는 기타 소수의 지오 코딩 서비스 제공 업체를 사용할 수 있습니다. 모델에 적절한 필드가있는 경우 거리 계산도 수행 할 수 있습니다 (실제로 산뜻한 것은 SQL에 대한 수학 계산입니다).

저는 제 제작 응용 프로그램 중 하나에서 장시간 사용하여 예를 들어 우편 번호 간의 거리를 계산했습니다. 앞서 언급했듯이, 저는 이것을 제작 단계에서 사용하고 있습니다. 따라서 코드의 건전성에 대해 걱정할 필요가 없습니다.

+0

고마워. 이것 좀 봐. 원래 좌표 사이의 거리를 처리하고 원시 지오 코드 데이터를 반환한다고 생각했지만 원래는 지오 코딩 된 데이터를 통합하려고 시도한 것 같습니다. – ADAM

1

레일에서 작업

임 예는 교외 등, 국가, 주, 다음 지역, 도시를 클릭합니다. (Google의) 샘플 코드는 작동하지만 취성이 있습니다. Google에서 가져온 지오 코딩 데이터는 불완전하고 최악의 경우가 가장 많습니다.

어쨌든. 모든 지오 코더가 빠지 긴하지만, 적어도 구글은 자유롭고 다른 사람들보다 덜 짜증니다. 일관성을 요구하기에는 너무 많은가요? 한숨. 다음을 시도하십시오. 아이콘 (getLocations AJAX 메소드가 여러 개를 반환 할 수 있음)을 전달하면 결과가 정상화됩니다. 멋진 정보를 얻으려면 placemark.address 필드를 사용하십시오. 경우에 따라 개별 필드보다 많은 정보가 포함됩니다. 일반적으로 지오 코딩되도록 실제로 보낸 텍스트 만 포함됩니다.

function Mark(placemark) { 
    this.latitude = 0.0; 
    this.longitude = 0.0; 
    this.accuracy = 0; 
    this.country = null; 
    this.region = null; 
    this.city = null; 
    this.postalCode = null; 
    this.street = null; 
    this.address = null; 
    this.placemark = placemark; 

    if (placemark) { 
    if (placemark.Point && placemark.Point.coordinates) { 
     this.latitude = placemark.Point.coordinates[0]; 
     this.longitude = placemark.Point.coordinates[1]; 
    } 

    var elem = placemark.AddressDetails; 

    if (elem) { 
     this.accuracy = elem.Accuracy; 

     if (elem.Country) { 
     elem = elem.Country; 
     this.country = elem.CountryNameCode; 
     } 

     if (elem.AdministrativeArea) { 
     elem = elem.AdministrativeArea; 
     this.region = elem.AdministrativeAreaName; 
     } 

     if (elem.SubAdministrativeArea) { 
     elem = elem.SubAdministrativeArea; 
     } 

     if (elem.Locality) { 
     elem = elem.Locality; 
     this.city = elem.LocalityName; 
     } 

     if (elem.PostalCode) { 
     this.postalCode = elem.PostalCode.PostalCodeNumber; 
     } 

     if (elem.Thoroughfare) { 
     this.street = elem.Thoroughfare.ThoroughfareName; 
     } 
    } 
    } 
} 
+0

코드에 대한 감사, 자바 스크립트로 무거운 짐을하는 흥미로운 접근 방식은 루비와 반대입니다. 나는 이것을 시도하려고한다 – ADAM

+0

.. 나는 바보 야, 나는 태그도 보지 않았다. 내 나쁜 - 그냥 일종의 자바 스크립트 질문했다. 당신이 가지고있는 것이 망치 일 때. – Maas

관련 문제