У меня есть небольшая проблема с проекцией Меркатора, я получаю значение нан при попытке проекции на широте ...Сегмент пересечения: проекция Меркатора получать значение нан
Мой codederived от этого вопроса: ConvertLATLONGTOXY
private static List<Point2D.Double> LatLongConvertionToXY(List<GeoPoint> coordinates) {
List<Point2D.Double> xys = new ArrayList<Point2D.Double>();
/*MercatorProjection projection = new MercatorProjection();*/
Log.i("LATLONG2RAD", "Nouvelle conversion");
for (GeoPoint coordinate : coordinates) {
double latitude = Double.valueOf(coordinate.getLatitudeE6());
double longitude = Double.valueOf(coordinate.getLongitudeE6());
// convert to radian
latitude = latitude * Math.PI/180;
longitude = longitude * Math.PI/180;
Log.i("LATLONG2RAD", String.valueOf(latitude)+" : "+String.valueOf(longitude));
/*Point2D.Double d = projection.project(longitude,latitude,
new Point2D.Double());*/
Point2D.Double d=new Point2D.Double();
double QUARTERPI = Math.PI/4.0;
d.x = longitude;
d.y = Math.log(Math.tan(QUARTERPI + 0.5 * latitude));
Log.i("PointLATLONG YX", String.valueOf(d.y)+" : "+String.valueOf(d.x));
xys.add(d);
}
return xys;
}
Этот пример возвращаемого значения: 12-15 21: 42: 27,165 I/LATLONG2RAD (32629): нувель преобразования
12-15 21: 42: 27,165 I/LATLONG2RAD (32629): LAT 782581,6732236275: L ОНГ -10478,398323613315
12-15 21: 42: 27,165 I/LATLONG2RAD (32629): LAT 782581,6732236275: LONG -10478,398323613315
12-15 21: 42: 27,165 I/LATLONG2RAD (32629): LAT 782587,2931838189: LONG -10476,478461436123
12-15 21: 42: 27,165 I/LATLONG2RAD (32629): LAT +782571,9517396939: LONG -10476.478461436123
Возвращаемые значения для проекции:
12-15 21:42 : 27,165: I/PointLATLONG YX (32629): NaN: -10478,3 98323613315
12-15 21: 42: 27,165 I/PointLATLONG YX (32629): NaN: -10478,398323613315
12-15 21: 42: 27,165 I/PointLATLONG YX (32629): NaN: - 10476,478461436123
12-15 21: 42: 27,165: I/PointLATLONG YX (32629): 1,7354151627839085: -10476,478461436123
Math.log() со значением меньше 0 вернет NaN – JRowan
thx Я думаю, что этот алгоритм мне не поможет, я использую класс проекции меркатора из библиотеки Java-карты, и это тоже значение возврата, я немного потерял, вы можете посмотреть это в этом вышеприведенном коде в комментарии. Есть идеи ? – WhatsUp
, что вы не используете его, как он использует его в этом сообщении, у него есть другие вещи, например: // Причина, по которой нам нужно определить значения min X и Y, заключается в том, что для того, чтобы нарисовать карту, // нам нужно компенсировать позицию так что не будет отрицательных значений X и Y minXY.x = (minXY.x == -1)? xy.x: Math.min (minXY.x, xy.x); minXY.y = (minXY.y == -1)? xy.y: Math.min (minXY.y, xy.y); чтобы проверить, вы должны вернуться и перечитать код, который он использует. – JRowan