【问题标题】:Geocoding with java API使用 java API 进行地理编码
【发布时间】:2018-10-15 09:06:06
【问题描述】:

我正在使用 Nominatim java api for nomitim 来获取给定地址的经度和纬度属性:https://github.com/AtlisInc/Nominatim-API。对于每个不同的输入经度和纬度输出都是相同的。纬度 = 51.3258094 和经度 = 11.3400106。我究竟做错了什么? 代码如下:

public class Geocoding(){
private volatile NominatimAPI nominatimAPI;//Use Volatile
public NominatimAPI getNominatimAPI(){
NominatimAPI result=nominatimAPI;
if(result==null){
    synchronized (this){//Synchronize for thread safety
        result=nominatimAPI;
        if (result==null){
            result=new NominatimAPI();
            nominatimAPI=result;
        }
    }
}
return result;
}

private static void mymethod2() {
    List<String> cities = Arrays.asList("Los Angeles","Berlin");
    String endpointUrl = "https://nominatim.openstreetmap.org/";
    MapPoint mapPoint;
    Geocoding test=new Geocoding();
    for (String city : cities) {
        NominatimAPI nominatim = test.getNominatimAPI();
        Address address = new Address();
        address.setCity(city);
        nominatim.initNominatimAPI(endpointUrl);
        mapPoint = nominatim.getMapPointFromAddress(address, 18);
       System.out.println(mapPoint.getLatitude()+","+mapPoint.getLongitude());
}
}
}

【问题讨论】:

  • 18 的精度似乎有点极端 - 您是否尝试降低精度?您链接到的示例使用5...
  • 在浏览了代码之后,这应该没关系 - 因为你只指定了“城市”,maxPrecision 无论如何都是 1,据我所知。
  • 在没有实际测试过任何东西的情况下,我建议在您的地址中添加一个状态。
  • 还有一个与这个问题非常相似的未解决问题 - github.com/AtlisInc/Nominatim-API/issues/5
  • 感谢您的考虑。我试过了,没有任何改变。

标签: java geocoding nominatim


【解决方案1】:

我没有使用address.setCity(city);,而是使用了address.setCountry(city)。对于每个涉及提名地址的输入,您可以使用setCountry。它返回真实的经度和纬度值。我不明白为什么只有setCountry有效,但它是.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2015-10-30
    相关资源
    最近更新 更多