GeoPoint getLatitudeE6()返回-80000000但getLongitudeE6()返回正确的值

时间:2011-01-26 22:01:59

标签: java android

非常奇怪的错误,我似乎无法弄清楚,一直在看它大约一个小时试图重构来解决这个问题,但我似乎无法弄清楚,也许一双新鲜的眼睛将能够帮助我。下面列出的是一小段代码。任何帮助表示赞赏。

示例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

2 个答案:

答案 0 :(得分:3)

狂野猜测:纬度定义为赤道北或南的角度,因此限制在-90 .. + 90度范围内。你输入的纬度-98.5左右是假的,这可能会让你感到沮丧。

现在,假设代码中的纬度以度数以外的某个单位表示,我会说你在某处遇到某种硬栅栏。

 You expected gp.getLat(): -98493095
 You got      gp.getLat(): -80000000

答案 1 :(得分:2)

纬度仅在-90到+90度之间。这是你的问题吗?

如果你想在德克萨斯州的圣安东尼奥绘制一个点,那你就转换了你的纬度和长度。 ;)