【问题标题】:Android google maps,google places, northern latitude exceeds southern latitudeAndroid google maps,google places,北纬超过南纬
【发布时间】:2014-08-27 22:58:09
【问题描述】:

我正在使用谷歌地图并使用 JSON 从谷歌位置解析我所在位置周围的咖啡馆。当我从当前位置 95% 的咖啡馆开始导航到选定的咖啡馆时,我得到一条折线,但在某些地方我得到错误,例如北纬超过南纬并且应用程序崩溃。

这是我的日志:

07-07 18:11:46.037: E/AndroidRuntime(25854): FATAL EXCEPTION: main
07-07 18:11:46.037: E/AndroidRuntime(25854): java.lang.IllegalArgumentException: southern latitude exceeds northern latitude (30.7223365 > 30.722303)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at com.google.android.gms.internal.fq.a(Unknown Source)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at com.google.android.gms.maps.model.LatLngBounds.<init>(Unknown Source)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at com.google.android.gms.maps.model.LatLngBounds.<init>(Unknown Source)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at com.example.google_map_ex.MainActivity.findDirections(MainActivity.java:285)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at com.example.google_map_ex.MainActivity$JSONParse$1.onItemClick(MainActivity.java:366)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.widget.AdapterView.performItemClick(AdapterView.java:301)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.widget.AbsListView.performItemClick(AbsListView.java:1490)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3275)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.widget.AbsListView$1.run(AbsListView.java:4518)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.os.Handler.handleCallback(Handler.java:725)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.os.Looper.loop(Looper.java:137)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at android.app.ActivityThread.main(ActivityThread.java:5283)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at java.lang.reflect.Method.invokeNative(Native Method)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at java.lang.reflect.Method.invoke(Method.java:511)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-07 18:11:46.037: E/AndroidRuntime(25854):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android google-maps google-places-api


    【解决方案1】:

    利用 LatLngBounds.Builder 类通过 .include() 包含您的 LatLng。它将防止此错误。

    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    builder.include(currentLocation).include(streetLocation);
    
    //Animate to the bounds
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(builder.build(), 100);
    mMap.moveCamera(cameraUpdate);
    

    【讨论】:

      【解决方案2】:

      这个异常基本上是在创建带有错误 LatLng 点的 LatLngBounds 对象时发生的。西南拉特隆应该是第一个参数,西北应该是第二个参数。 check this link

      【讨论】:

        【解决方案3】:

        首先,我是中国人,我用的是高德地图(aMap.com),在运行的时候

        aMap.addPolyline(new
        PolylineOptions().add(drawLineLastLatlng,latlng).width(10)            
        .color(Color.argb(255, 1, 255, 255)))
        

        出现“南纬超过北纬”异常;然后我检查课程并在 LineNumber 35 处找到句子,然后我像这样更改我的代码,问题得到解决:

        if(drawLineLastLatlng!=null&&drawLineLastLatlng.latitude!=latlng.latitude){                                               
                        if(latlng.latitude>drawLineLastLatlng.latitude){
                            aMap.addPolyline(new PolylineOptions().add(drawLineLastLatlng,latlng).width(10)
                                    .color(Color.argb(255, 1, 255, 255)));
                        }else{
                            aMap.addPolyline(new PolylineOptions().add(latlng,drawLineLastLatlng).width(10)
                                    .color(Color.argb(255, 1, 255, 255)));
                        }
                    }
        

        【讨论】:

        • 可能有一些语法错误,请不要指点我
        【解决方案4】:

        在您的代码中找到这一行:

        mMapView.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(pointA, pointB), 50));
        

        并将其更改为:

        mMapView.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(pointB, pointA), 50));
        

        切换两点,就解决了!

        编辑:当然,您需要一些方法来检查是否需要切换,但这取决于您的实现和应用程序逻辑。虚拟解决方案是使用 try-catch 并在崩溃时切换点。

        【讨论】:

          猜你喜欢
          • 2020-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-02
          • 2014-03-19
          • 2015-05-06
          相关资源
          最近更新 更多