非常奇怪的错误,我似乎无法弄清楚,我花了大约一个小时试图通过重构来解决这个问题,但我似乎无法弄清楚,也许新的眼睛会有所帮助我。下面列出了一小段代码。感谢您的帮助。
示例 KML 坐标字符串
-98.493095,29.416311,0.000000
KMLHandler.java(我在kml中读取的是字符串格式)
String[] coords = s.split(",");
if ( coords.length == 3 ) {
GeoPoint gp = GeoPointUtils.getGeoPoint(coords[0].trim(), coords[1].trim());
((Region)overlayItem).addCoordinate(gp);
Log.d(TAG, "gp.getLat(): " + gp.getLatitudeE6())
Log.d(TAG, "gp.getLong():" + gp.getLongitudeE6());
}
GeoPointUtils.java
public static GeoPoint getGeoPoint(double latitude , double longitude) {
Log.d(TAG, "GeoPointUtils.getGeoPoint(double)");
Log.d(TAG, "\tIncoming lat -> " + latitude);
Log.d(TAG, "\tConverted lat -> " + (int) (latitude * 1E6));
Log.d(TAG, "\tIncoming long -> " + longitude);
Log.d(TAG, "\tConverted long -> " + (int) (longitude * 1E6));
return new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6));
}
public static GeoPoint getGeoPoint(String latitude , String longitude) {
Log.d(TAG, "GeoPointUtils.getGeoPoint(String)");
Log.d(TAG, "\tIncoming lat -> " + latitude);
Log.d(TAG, "\tConverted lat -> " + Double.parseDouble(latitude));
Log.d(TAG, "\tIncoming long -> " + longitude);
Log.d(TAG, "\tConverted long -> " + Double.parseDouble(longitude));
return getGeoPoint(Double.parseDouble(latitude), Double.parseDouble(longitude));
}
Logcat 结果(抱歉语法高亮)
GeoPointUtils.getGeoPoint(String)
Incoming lat -> -98.493095
Converted lat -> -98.493095
Incoming long -> 29.416311
Converted long -> 29.416311
GeoPointUtils.getGeoPoint(double)
Incoming lat -> -98.493095
Converted lat -> -98493095
Incoming long -> 29.416311
Converted long -> 29416311
gp.getLat(): -80000000
gp.getLong(): 29416311
最佳答案
野驴猜测:纬度定义为赤道以北或以南的角度,因此限制在 -90..+90 度范围内。您输入的纬度,-98.5 左右,是假的,这可能会把事情搞砸。
现在,假设您的代码中的纬度以度数以外的其他单位表示,我会说您在某处碰到了某种硬栅栏。
You expected gp.getLat(): -98493095
You got gp.getLat(): -80000000
关于java - GeoPoint getLatitudeE6() 返回 -80000000 但 getLongitudeE6() 返回正确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810550/