java - 如何使用 GeoTools/ProJ.4(或其他 api)将坐标从 HK80 GRID 转换为纬度/经度?

标签 java android dictionary geotools proj

如何将一组 hk80 网格转换为纬度/经度?

HK 1980 网格为 EPSG 2326,而纬度/经度 WGS84 为 EPSG 4326

或者有没有更适合这样做

最佳答案

希望下面的代码可以帮助到您。我需要使用 GeoTools 来实现你的目的。另外,您需要为 epsg 2326 插入相关的北距和东距。但是,我仍然无法解决异常问题。为了正确使用此代码,您需要下载并导入除 gt-epsg-postgresql 之外的所有 GeoTools jar。

package org.geotools.tutorial;

import java.awt.geom.Point2D;
import java.io.File;

import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.factory.Hints;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.referencing.CRS;
import org.geotools.referencing.ReferencingFactoryFinder;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.geotools.swing.data.JFileDataStoreChooser;
import org.opengis.referencing.crs.CRSAuthorityFactory;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.geotools.referencing.*;
/**
 * Prompts the user for a shapefile and displays the contents on the screen in a map frame.
 * <p>
 * This is the GeoTools Quickstart application used in documentationa and tutorials. *
 */
public class quickstart {

/**
 * GeoTools Quickstart demo application. Prompts the user for a shapefile and displays its
 * contents on the screen in a map frame
 */
    public static void main(String[] args) throws Exception {
        //Point2D.Double srcProjec = new Point2D.Double (836694.050, 819069.800);
        //Point2D.Double dstProjec = new Point2D.Double (132,37);
        // display a data store file chooser dialog for shapefiles
        //Hints hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE);
        //CRSAuthorityFactory factory = ReferencingFactoryFinder.getCRSAuthorityFactory("EPSG", hints);
        //CoordinateReferenceSystem crs = factory.createCoordinateReferenceSystem("EPSG:4326");
        CRSAuthorityFactory   factory = CRS.getAuthorityFactory(true);
        CoordinateReferenceSystem srcCRS = factory.createCoordinateReferenceSystem("EPSG:2326");
        CoordinateReferenceSystem dstCRS = factory.createCoordinateReferenceSystem("EPSG:4326");
        boolean lenient = true; // allow for some error due to different datums
        MathTransform transform = CRS.findMathTransform(srcCRS, dstCRS, lenient);
        double[] srcProjec = {818039, 836361};// easting, northing, 
        double[] dstProjec = {0, 0};
        transform.transform(srcProjec, 0, dstProjec, 0, 1);
        System.out.println("longitude: " + dstProjec[0] + ", latitude: " + dstProjec[1]);

    }

}

关于java - 如何使用 GeoTools/ProJ.4(或其他 api)将坐标从 HK80 GRID 转换为纬度/经度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642152/

相关文章:

python - 'str'对象不支持python中的项目分配错误

java - 我如何从命令行运行一个 intellij Java 项目?

android 数据库还是 xml/kml?

java - 用于编辑 ArrayList 中对象的 boolean 方法

android.os.NetworkOnMainThreadException 与 android 4.2

android - Xamarin中的Build错误缺少youtube软件包

c++ - 在以结构为值的 STL 映射中,结构的析构函数被调用两次

swift - 使用条件排序遍历通用类型的 Swift 字典

java - 如何在没有 root 的情况下可靠地模拟 Android 上的触摸事件(如 Automate 和 Tasker)?

java - 更改 Java Swing 的背景