gpt4 book ai didi

自定义 map 上的Javascript纬度和经度像素

转载 作者:行者123 更新时间:2023-11-28 00:40:19 25 4
gpt4 key购买 nike

我有一个由坐标(纬度、经度)描述的商店列表,我需要在我的自定义世界地图上将它们解析为标记(使用 css 绝对定位)。 Google map 和其他库(jVector map 等)不是解决方案。我发现了一些公式可以将经纬度转换为用于标记的像素左/右值,但转换似乎不准确。

可以看到a demo clicking here .例如,红色的子弹应该是罗马,绿色的应该是里约热内卢。两者都不在应有的位置,并且标记之间的“错误偏移”并不总是相同(换句话说:添加 translateX(-XXpx) 并不能解决所有问题)。

显然我遗漏了一些东西,我很确定我应该以某种我不知道也不理解的方式设置 map 图像。有人可以帮忙吗?

先谢过了,下面是demo的相关代码:

<div id="map" style="width: 800px;margin:100px;auto;position:relative;background-color:#dedede;">
<img src="map.svg" style="width:100%;">
</div>
<script>
var map = document.getElementById('map');
var stores = [
{
"name": "Rome",
"n": 10,
"lat": 41.9097306,
"lng": 12.2558141,
"fill": "red"
},
{
"name": "Rio di Janeiro",
"n": 5,
"lat": -22.9138851,
"lng": -43.7261746,
"fill": "green"
}
];
stores.forEach(element => {
var pos = coordToPixel(element.lat,element.lng);
var marker = document.createElement('div');
marker.className = 'marker';
marker.style.left = pos.x+'px';
marker.style.top = pos.y+'px';
marker.style.backgroundColor = element.fill;
map.appendChild(marker);
});
function coordToPixel(lat,lng)
{
var MAP_WIDTH = 800,
MAP_HEIGHT = 444
;
var x = ((lng+180)*MAP_WIDTH/360),
y = ((90-lat)*MAP_HEIGHT/180)
;
return {x,y}
}
</script>

最佳答案

你的观点不准确,因为你的公式没有考虑到地球不是平面。

假设您使用的是 mercador 投影(在我看来是这样)。

来自详细answer的伪代码

latitude    = 41.9097306;
longitude = 12.2558141;

mapWidth = 800;
mapHeight = 444;

// get x value
x = (longitude+180)*(mapWidth/360)

// convert from degrees to radians
latRad = latitude*PI/180;

// get y value
mercN = ln(tan((PI/4)+(latRad/2)));
y = (mapHeight/2)-(mapWidth*mercN/(2*PI));

关于自定义 map 上的Javascript纬度和经度像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53866436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com