역 지오코딩을 사용한 지리적 좌표에 대한 주소 검색

프로그램은 ReverseGeocoder 클래스를 사용하여, 일련의 지리적 좌표를 사용하는 특정 위치에 대해 사람이 읽을 수 있는 이름(예: 국가, 도시, 거리 주소)을 검색할 수 있습니다.

역 지오코딩 요청을 보낼 때에는 정보(예: 국가, 도시, 거리 주소)를 받으려는 관리 범위를 지정할 수 있습니다. ReverseGeocodeExchange 클래스에는 관리 범위의 수준을 지정하는 데 사용할 수 있는 다음과 같은 상수가 포함되어 있습니다.

  • ADDRESS: 거리 주소를 반환합니다.
  • CITY: 도시를 반환합니다.
  • COUNTRY: 국가를 반환합니다.
  • MCC: 휴대폰 국가 번호를 반환합니다.
  • POSTAL: 우편 번호를 반환합니다.
  • PROVINCE_STATE: 시/도(해외: 도/주)를 반환합니다.
  • TIME_ZONE_ID: 표준 시간대를 반환합니다.

정확도가 중요한 상황에서는 거리 주소를 요청해야 할 수 있습니다. 다른 상황에서는 시 또는 국가 이름만 필요할 수도 있습니다.

프로그램에서 역 지오코딩 요청을 보내지만 기대한 데이터를 받지 못하는 경우도 있을 수 있습니다. 예를 들어, 프로그램에서 ADDRESS 관리 범위를 사용하여 요청을 보내고 지리적 위치가 시의 경계 외부에 있는 경우, 역 지오코딩 서버는 특정 거리 주소를 찾지 못할 수 있습니다. 이 경우 시(해외의 경우, 주) 또는 도 이름만 프로그램에 반환될 수 있습니다.

역 지오코딩 요청의 결과는 해당 요청이 정확한 거리 주소를 요청한 경우를 제외하고 단말기의 캐시에 추가됩니다. 역 지오코딩 요청을 시작할 때 프로그램은 특정 주소를 요청하는 경우를 제외하고, 이전 검색 결과에 대한 캐시를 먼저 확인한 다음 서버를 호출합니다. 역 지오코딩 요청은 동기화 또는 비동기화될 수 있습니다.

위치의 지리적 좌표 지정

지리적 좌표에 대한 위치 이름을 검색하려면 지리적 좌표를 포함하는 MapPoint 객체를 만들어야 합니다.
MapPoint location = new MapPoint(43.4815, -80.5407);

비동기 역 지오코딩 요청 보내기

비동기 역 지오코딩 요청을 보낼 때 ServerExchangeCallback 인터페이스를 구현하는 클래스에 대한 참조를 전달해야 합니다(다음 예에서 callback 변수로 표현됨). 위치 좌표, 관리 범위, 단말기의 방위 및 요청이 시간 초과되기까지의 시간 길이도 제공해야 합니다. ReverseGeocoder.reverseGeocode()를 호출할 때 프로그램은 이 요청을 지오코딩 서버로 보내고 결과가 나오면 적절한 ServerExchangeCallback 메소드를 호출합니다.
int bearing = 1;
int timeout = 0;
MyServerExchangeCallback callback = new MyServerExchangeCallback();
try
{
    ReverseGeocoder.getInstance().reverseGeocode(callback, location, 
            ReverseGeocodeExchange.ADDRESS, bearing, timeout);
} 
catch (ReverseGeocodeException e)
{
    // Do something with the exception
}

ServerExchangeCallback 인터페이스를 구현하는 클래스를 만들 때 프로그램에 포함해야 하는 메소드에는 requestSuccess(), requestFailure()requestHalted() 의 세 가지가 있습니다. 역 지오코딩 요청이 완료되면 프로그램은 요청 결과에 따라 세 메소드 중 하나를 호출합니다.

역 지오코딩 요청이 성공적으로 이루어지면 검색 결과의 Vector가 포함되어 있는 ReverseGeocodeExchange 객체가 반환됩니다. 검색 결과는 ReverseGeocodeExchange.getResults()를 호출하여 액세스할 수 있습니다. Vector에는 위치 이름, 설명 및 좌표와 같은 위치 세부 정보가 들어 있는 net.rim.device.api.lbs.maps.model.MapLocation 객체가 포함되어 있습니다. 속성의 전체 목록은 MapLocation 클래스를 참조하십시오.
public class MyServerExchangeCallback implements ServerExchangeCallback
{
    public void requestSuccess(ServerExchange exchange)
    {
        if(exchange instanceof ReverseGeocodeExchange)
        {
            // Casts the Exchange object to a ReverseGeocodeExchange 
            // object and retrieves the Vector of results.
            ReverseGeocodeExchange reverseGeocodeExchange = 
                    (ReverseGeocodeExchange)exchange;
            Vector results = reverseGeocodeExchange.getResults();
            // Do something with the results
        }
    }
    public void requestFailure(ServerExchange exchange)
    {
        // Inform the user of the failure
    }
    public void requestHalted()
    {
        // Invoked when the request is stopped
    }
}

동기 역 지오코딩 요청 보내기

동기 역 지오코딩 요청의 경우 프로그램은 ServerExchangeCallback 인터페이스를 구현하지 않아도 됩니다. 동기 지오코딩 요청을 시작하려면 ServerExchangeCallback을 구현하는 클래스에 대한 참조를 전달하는 대신 null을 인수로 지정해야 합니다. 동기 지오코딩 요청을 실행할 때에는 요청 결과를 수동으로 확인해야 합니다. 일반적으로 UI 스레드가 아닌 스레드에서 동기 지오코딩 요청을 실행해야 합니다. 그렇지 않으면 사용자는 요청 중에 UI와 상호 작용할 수 없습니다.
try
{ 
    ReverseGeocodeExchange exchange = ReverseGeocoder.getInstance().reverseGeocode(
            callback, location, ReverseGeocodeExchange.ADDRESS, bearing, timeout);
    // Check if the request was successful
    if(exchange.getExceptionList().size() == 0)
    {
        if(exchange instanceof ReverseGeocodeExchange)
        {
            // Casts the Exchange object to a ReverseGeocodeExchange 
            // object and retrieves the Vector of results.
	           ReverseGeocodeExchange reverseGeocodeExchange = 
                    (ReverseGeocodeExchange)exchange;
            Vector results = reverseGeocodeExchange.getResults();
            // Do something with the results
        }
    }
    else
    {
        // Inform the user of the failure
    }
}
catch(GeocodeException e)
{
    // Do something with the exception
}

이 정보가 도움이 되었습니까? 의견을 보내 주십시오.