安卓谷歌地图、谷歌地点,北纬超过南纬

12

我正在使用谷歌地图,并使用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)
4个回答

36

利用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);

3

这个异常通常发生在使用错误的LatLng点创建LatLngBounds对象时。southwest Latlong 应该是第一个参数,而northwest 应该是第二个参数。 查看此链接


1

首先,我是中国人,我使用高德地图(aMap.com),当我运行这个程序时

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

如果出现“南纬超过北纬”的异常,那么我会检查该类并找到第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)));
                }
            }

也许有一些语法错误,请任何人指出来。 - Michael Zhang

0
在你的代码中找到这一行:
mMapView.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(pointA, pointB), 50));

并将其更改为:

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

交换这两个点,问题就解决了!

编辑:当然,你需要一些方法来检查是否需要交换,但这取决于你的实现和应用逻辑。虚拟解决方案是使用 try-catch,如果会崩溃,则交换点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接