如何使用osmdroid NominatimPOIProvider

时间:2019-05-18 23:21:29

标签: android osmdroid

我正在尝试使用osmdroid Bus_station使NominatimPOIProvider靠近我的位置,但是我收到以下NullException

  

java.lang.IllegalArgumentException:南部必须在   [-85.05112877980658,85.05112877980658]           在org.osmdroid.util.BoundingBox.set(BoundingBox.java:69)上。

我确定坐标没有在我所在位置附近的任何点

所以这是我实现逻辑的方法

 public  void poinOfInt(View view){

     bus_stop = myLocationNewOverlay.getMyLocation();

       NominatimPOIProvider poiProvider = new NominatimPOIProvider( BuildConfig.APPLICATION_ID);
       ArrayList<POI> pois = poiProvider.getPOICloseTo(bus_stop, "highway", 50, 100);


      FolderOverlay poiMarkers = new FolderOverlay();
      map.getOverlays().add(poiMarkers);

      Drawable poiIcon = getResources().getDrawable(R.drawable.marker_default);
      for (POI poi:pois){
          Marker poiMarker = new Marker(map);
          poiMarker.setTitle(poi.mType);
          poiMarker.setSnippet(poi.mDescription);
          poiMarker.setPosition(poi.mLocation);
          poiMarker.setIcon(poiIcon);
         /* if (poi.mThumbnail != null){
            poiItem.setImage(new BitmapDrawable(poi.mThumbnail));
          }*/
         poiMarkers.add(poiMarker);
      }
    }

我收到以下错误:

  

E / Android运行时:致命异常:主要       流程:com.example.xibomba,PID:6617       java.lang.IllegalStateException:无法执行android:onClick的方法           在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)           在android.view.View.performClick(View.java:4754)           在android.view.View $ PerformClick.run(View.java:19605)           在android.os.Handler.handleCallback(Handler.java:733)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:146)           在android.app.ActivityThread.main(ActivityThread.java:5752)           在java.lang.reflect.Method.invokeNative(本机方法)           在java.lang.reflect.Method.invoke(Method.java:515)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1291)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)           在dalvik.system.NativeStart.main(本机方法)        造成原因:java.lang.reflect.InvocationTargetException           在java.lang.reflect.Method.invokeNative(本机方法)           在java.lang.reflect.Method.invoke(Method.java:515)           在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)           在android.view.View.performClick(View.java:4754)           在android.view.View $ PerformClick.run(View.java:19605)           在android.os.Handler.handleCallback(Handler.java:733)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:146)           在android.app.ActivityThread.main(ActivityThread.java:5752)           在java.lang.reflect.Method.invokeNative(本机方法)           在java.lang.reflect.Method.invoke(Method.java:515)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1291)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)           在dalvik.system.NativeStart.main(本机方法)        引起原因:java.lang.IllegalArgumentException:南部必须位于[-85.05112877980658,85.05112877980658]           在org.osmdroid.util.BoundingBox.set(BoundingBox.java:69)           在org.osmdroid.util.BoundingBox(BoundingBox.java:43)           在org.osmdroid.bonuspack.location.NominatimPOIProvider.getUrlCloseTo(NominatimPOIProvider.java:73)           在org.osmdroid.bonuspack.location.NominatimPOIProvider.getPOICloseTo(NominatimPOIProvider.java:132)           在com.example.xibomba.MapaActivity.poinOfInt(MapaActivity.java:193)           在java.lang.reflect.Method.invokeNative(本机方法)           在java.lang.reflect.Method.invoke(Method.java:515)           在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)           在android.view.View.performClick(View.java:4754)           在android.view.View $ PerformClick.run(View.java:19605)           在android.os.Handler.handleCallback(Handler.java:733)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:146)           在android.app.ActivityThread.main(ActivityThread.java:5752)           在java.lang.reflect.Method.invokeNative(本机方法)           在java.lang.reflect.Method.invoke(Method.java:515)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1291)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)           在dalvik.system.NativeStart.main(本机方法)

2 个答案:

答案 0 :(得分:0)

poiProvider.getPOICloseTo方法的最后一个参数应该以度为单位(文档说:“ maxDistance to position,以度为单位。请注意,它用于围绕该位置而不是圆形来构建边界框。”)。您通过了100,这对学位来说是很高的价值,所以也许您假设这些单位是千米或米。尝试使用较小的值,例如0.10.2或类似的as in examples

答案 1 :(得分:0)

提供用于设置bus_stop地理位置的代码。

(顺便说一句,搜索“高速公路”将不会到达公交车站)