2

我正在使用 OpenMap,并且正在使用 com.bbn.openmap.layer.shape.ShapeFile 读取 ShapeFile。边界框被读取为纬度/经度点,例如 39.583642,-104.895486。边界框是一个左下点和一个右上点,表示点所在的位置。在 OpenMap 中被命名为“弧度”的“点”采用不同的格式,如下所示:[0.69086486, -1.8307719, 0.6908546, -1.8307716, 0.6908518, -1.8307717, 0.69085056, -1.8307726, -1.6907848. , 0.6908477, -1.8307738, 0.69084626, -1.8307749, 0.69084185, -1.8307792]。

如何将“0.69086486,-1.8307719”之类的点转换为可用于普通图形的 x,y 坐标?

我相信这里需要的只是某种转换,因为将这些点导入 Excel 并绘制它们会创建一条线,其曲线与给定位置(纬度/经度)的道路曲线相匹配。但是,需要手动调整轴,我没有关于如何调整轴的参考,因为给定的边界框似乎与给定点的格式不同。

ESRI Shapefile 技术描述似乎没有提到这一点(http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf)。

4

2 回答 2

1

0.69086486, -1.8307719是以弧度表示的纬度和经度。

首先,转换为度数(乘以 (180/pi)),然后您的边界框和坐标之间将有共同的单位。

然后,您可以使用以下内容将所有内容绘制在本地框架中:

x = (longitude-longitude0)*(6378137*pi/180)*cos(latitude0*pi/180)
y = (latitude-latitude0)*(6378137*pi/180)

(latitude0, longitude0) 是参考点的坐标(例如边界框的左下角),单位是角度的度数,距离的米数

编辑——解释:这是地球的正交投影,被认为是一个半径为 6378137.0 m(WGS84 椭球的半长轴)的球体,以点 (lat0, lon0) 为中心

于 2010-05-15T09:33:17.837 回答
0

在 OpenMap 中,有多种方法可以将弧度转换为十进制度:

Length.DECIMAL_DEGREE.fromRadians(radVal);
Math.toDegrees(radVal)  // Standard java library

对于数组,您可以使用 ProjMath.arrayDegToRad(double[] radvals);

小心最后一个,它会进行适当的转换。因此,如果您从 OMPoly 中获取 lat/lon 数组,请在转换之前先对其进行复制。否则,您将弄乱 OMPoly 的内部坐标,它期望以弧度为单位。

于 2010-05-19T18:53:05.173 回答