Javascript 将地理坐标(纬度、液化天然气)映射到地图(x、y)
我有一些城市的地理坐标(纬度和经度),我想得到x,y坐标,这样可以把它们绘制成地图 这张地图是一张标准地图,就像这个例子一样Javascript 将地理坐标(纬度、液化天然气)映射到地图(x、y),javascript,ruby,geocoding,proj4js,Javascript,Ruby,Geocoding,Proj4js,我有一些城市的地理坐标(纬度和经度),我想得到x,y坐标,这样可以把它们绘制成地图 这张地图是一张标准地图,就像这个例子一样 我尝试了几种我发现的公式,但似乎没有一种真正起作用:(.简单的javascript代码或ruby最好:)除非你在非常小的范围内(并且接近赤道)工作,否则你不会发现这很容易。维基百科是一个好的开始 更简单的方法是使用类似的东西并坚持使用纬度和经度。使用谷歌地图API,您可以将jpg覆盖在地图上并正确定位 这里有一个例子 这是关于覆盖的api页面 有许多方法可以以不同的精度
我尝试了几种我发现的公式,但似乎没有一种真正起作用:(.简单的javascript代码或ruby最好:)除非你在非常小的范围内(并且接近赤道)工作,否则你不会发现这很容易。维基百科是一个好的开始
更简单的方法是使用类似的东西并坚持使用纬度和经度。使用谷歌地图API,您可以将jpg覆盖在地图上并正确定位 这里有一个例子 这是关于覆盖的api页面
有许多方法可以以不同的精度处理此问题。但是,它们都归结为执行与地图对应的投影 如果您知道您的地图属于墨卡托投影类型,则可以简单地将lat/long坐标视为X/Y,并进行适当的缩放和转换。也就是说,您将找到一个简单的ax+b和cy+d来完成这项工作 如果您的地图不是墨卡托投影(如果它试图获得一致的比例,可能不是,正如这张地图所显示的那样),那么您最好假设它是“地球切线”投影。(这对于小的陆地来说是可行的。)在这种情况下,您需要首先将Lat/Long投影到三维坐标系中
z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)
正z指向北极。正y点到0,0,正x点到纬度0长90(东)和正纬度/长是北和东。当然,您必须先转换为弧度
所有这些都假设地球是球形的,这并不完全正确,但它足够近,除非你发射远程迫击炮弹
无论如何,一旦你有了XYZ,你就需要为地图旋转和缩放。要绕Z轴旋转,只需在投影到三维之前减去基准经度。这样做可以使地图在零经度上居中,从而实现最简单的数学运算
完成此操作后,只需向前旋转地球仪,直到原始地图面朝前方。通过y-z轴上的二维旋转来执行此操作。用来找出那个部分
最后,您的x、z坐标将与地图的x、y坐标非常吻合,以获得前面所述的适当比例/平移。除了上述答案之外,还有一个开源的proj4js库,它可以在各种地图投影之间执行转换。OpenLayers内部使用它来实现这类功能,并支持许多流行的投影和坐标系。也许这会有所帮助,我已经使用javascript为美国完成了一个实现
演示/代码:进一步思考,假设位图是标准投影,它应该可以工作,但您必须确定自己的投影参数(子午线、缩放等)。这应该是可能的,但对于地图投影新手来说可能不是。谢谢,我能够从提到的库中提取所需的公式:)