Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将地理坐标(纬度、液化天然气)映射到地图(x、y)_Javascript_Ruby_Geocoding_Proj4js - Fatal编程技术网

Javascript 将地理坐标(纬度、液化天然气)映射到地图(x、y)

Javascript 将地理坐标(纬度、液化天然气)映射到地图(x、y),javascript,ruby,geocoding,proj4js,Javascript,Ruby,Geocoding,Proj4js,我有一些城市的地理坐标(纬度和经度),我想得到x,y坐标,这样可以把它们绘制成地图 这张地图是一张标准地图,就像这个例子一样 我尝试了几种我发现的公式,但似乎没有一种真正起作用:(.简单的javascript代码或ruby最好:)除非你在非常小的范围内(并且接近赤道)工作,否则你不会发现这很容易。维基百科是一个好的开始 更简单的方法是使用类似的东西并坚持使用纬度和经度。使用谷歌地图API,您可以将jpg覆盖在地图上并正确定位 这里有一个例子 这是关于覆盖的api页面 有许多方法可以以不同的精度

我有一些城市的地理坐标(纬度和经度),我想得到x,y坐标,这样可以把它们绘制成地图

这张地图是一张标准地图,就像这个例子一样


我尝试了几种我发现的公式,但似乎没有一种真正起作用:(.简单的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为美国完成了一个实现


演示/代码:

进一步思考,假设位图是标准投影,它应该可以工作,但您必须确定自己的投影参数(子午线、缩放等)。这应该是可能的,但对于地图投影新手来说可能不是。谢谢,我能够从提到的库中提取所需的公式:)