2010-02-07 7 views
2

в OpenLayers мы можем просто преобразовать EPSG: 900913 в EPSG: 4326
Я взгляд на Java Lib может сделать это.
здесь я нашел это, http://www.jhlabs.com/java/maps/proj/index.html
Java преобразование проекции EPSG: 900913 в EPSG: 4326

но документ находится в C++
я не знаю, как использовать его.


Если кто konw что
пожалуйста, напишите простой код

+1

Какой документ? Можете ли вы предоставить прямую ссылку? –

ответ

2

Джерри Huxtable восхитительно Globe Applet на странице цитируемой действительно написана на Java, как показано на download. Класс com.jhlabs.map.proj.ProjectionFactory содержит метод с именем fromPROJ4Specification(), который возвращает com.jhlabs.map.proj.Projection. Вы можете использовать параметры EPSG: 900913 specified on the OpenLayers site для создания нужной проекции.

 
900913: 
+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 
+x_0=0.0 +y_0=0 +k=1.0 +units=m [email protected] +no_defs 

Вы также должны посмотреть OpenMap.

+0

Не видел глобус Апплет раньше - очень приятно. – geographika

2

Другой вариант заключается в использовании библиотеки GeoTools OpenSource ГИС Java:

http://geotools.org/

Подробная информация о классах проекционных здесь:

http://geotools.org/javadocs/org/geotools/referencing/operation/projection/MapProjection.html

определений проекции в различных форматах для всех проекций можно загрузить с:

http://www.spatialreference.org/

E.g. http://www.spatialreference.org/ref/epsg/4326/

+0

Geotools сложный, но очень, очень мощный - мы используем его на моей работе для преобразования координат и проекций, между прочим. –

+0

GeoTools - LGPL, который является verboten в моей компании. – Jamie

2

Geotools, вероятно, самая лучшая библиотека для этого. Взглянув на их CRS tutorial, это выглядит тривиально преобразовать из одной системы координат в другую с помощью:

CoordinateReferenceSystem dataCRS = schema.getCoordinateReferenceSystem(); 
CoordinateReferenceSystem worldCRS = map.getCoordinateReferenceSystem(); 
boolean lenient = true; // allow for some error due to different datums 
MathTransform transform = CRS.findMathTransform(dataCRS, worldCRS, lenient); 

Ваши CRS ссылки могут быть получены с помощью:

CRS.decode("EPSG:4326") 

согласно javadoc.

1

Также интересно: Proj4j

Proj4J библиотека Java для преобразования координат точки из одной географической системы координат в другую, в том числе нулевых точек преобразований. Ядром этой библиотеки является порт библиотеки PROJ.4 C.

+0

Некоторый код был бы хорош в том, как его использовать. – mico

+0

Посмотрите на этот [пример] (https://trac.osgeo.org/proj4j/browser/trunk/src/test/java/org/osgeo/proj4j/ExampleTest.java). Для простого howto в javascript, посмотрите здесь: [proj4js] (http://proj4js.org/) – pxp

0

Я понимаю, что это почти 8 лет назад, но, возможно, это может помочь другому бесстрашному путешественнику.

Нам пришлось отойти от GeoTools, потому что это LGPL, который не разрешен нашими законными людьми.

Я просто перевел наш код, чтобы использовать proj4j (https://trac.osgeo.org/proj4j/). Не похоже, что он активно развивается, но он работает для наших простых потребностей. Кроме того, лицензией является Apache 2.0, что гораздо более разрешительно.

Доступен через Maven, так что это упрощает: http://search.maven.org/#artifactdetails%7Corg.osgeo%7Cproj4j%7C0.1.0%7Cjar.

Он напрямую не поддерживает EPSG: 900913, так как это не официальный стандарт. Он поддерживает EPSG: 3857, что то же самое.

Вот фрагмент делает то, что вы ищете:

public Point2D.Double transform(Point2D.Double point, String sourceCRS, String targetCRS) { 
    Point2D.Double destPosition = new Point2D.Double(); 

    CRSFactory factory = new CRSFactory(); 
    CoordinateReferenceSystem srcCrs = factory.createFromName(sourceCRS); // Use "EPSG:3857" here instead of 900913. 
    CoordinateReferenceSystem destCrs = factory.createFromName(targetCRS); // Use "EPSG:4326 here. 
    CoordinateTransform transform = new CoordinateTransformFactory().createTransform(srcCrs, destCrs); 

    ProjCoordinate srcCoord = new ProjCoordinate(point.getX(), point.getY()); 
    ProjCoordinate destCoord = new ProjCoordinate(); 
    transform.transform(srcCoord, destCoord); 
    destPosition.setLocation(destCoord.x, destCoord.y); 

    return destPosition; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^