1

住所を受け取り、その住所の経度と緯度の座標を返すことができる単純な Java 関数を探しています。私の研究に基づいて、これは私がこれまでに見つけたものです:

これを実装する方法が少しわかりません。さまざまなメソッドを呼び出す必要がある順序がわかりません。

たとえば、私はこれをしなければなりませんか?:

String address = 'Some Place, Venezuela';
Geocoder geo = new Geocoder();

String url = geo.encode(address);

String encodeUrl = geo.urlEncode(url);

GLatLng latLng = geo.decode(encodeUrl);

あなたが使用した他のものがある場合は、それを共有してください。

/*
*
* ==============================================================================
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.wicketstuff.gmap.geocoder;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.StringTokenizer;
import org.wicketstuff.gmap.api.GLatLng;

/**
* Geocoder. See: http://www.google.com/apis/maps/documentation/services.html# Geocoding_Direct
*
* @author Thijs Vonk
*/
public class Geocoder implements Serializable
{

    private static final long serialVersionUID = 1L;
    // Constants
    public static final String OUTPUT_CSV = "csv";
    public static final String OUTPUT_XML = "xml";
    public static final String OUTPUT_KML = "kml";
    public static final String OUTPUT_JSON = "json";
    private final String output = OUTPUT_CSV;

    public Geocoder()
    {
    }

    public GLatLng decode(String response) throws GeocoderException
    {

        StringTokenizer gLatLng = new StringTokenizer(response, ",");

        String status = gLatLng.nextToken();
        gLatLng.nextToken(); // skip precision
        String latitude = gLatLng.nextToken();
        String longitude = gLatLng.nextToken();

        if (Integer.parseInt(status) != GeocoderException.G_GEO_SUCCESS)
        {
            throw new GeocoderException(Integer.parseInt(status));
        }

        return new GLatLng(Double.parseDouble(latitude), Double.parseDouble(longitude));
    }

    /**
* builds the google geo-coding url
*
* @param address
* @return
*/
    public String encode(final String address)
    {
        return "http://maps.google.com/maps/geo?q=" + urlEncode(address) + "&output=" + output;
    }

    /**
* @param address
* @return
* @throws IOException
*/
    public GLatLng geocode(final String address) throws IOException
    {
        InputStream is = invokeService(encode(address));
        if (is != null)
        {
            try
            {
                String content = org.apache.wicket.util.io.IOUtils.toString(is);
                return decode(content);
            }
            finally
            {
                is.close();
            }
        }
        return null;
    }

    /**
* fetches the url content
*
* @param address
* @return
* @throws IOException
*/
    protected InputStream invokeService(final String address) throws IOException
    {
        URL url = new URL(address);
        return url.openStream();
    }

    /**
* url-encode a value
*
* @param value
* @return
*/
    private String urlEncode(final String value)
    {
        try
        {
            return URLEncoder.encode(value, "UTF-8");
        }
        catch (UnsupportedEncodingException ex)
        {
            throw new RuntimeException(ex.getMessage());
        }
    }
}
4

1 に答える 1