我正在使用usaLow.js地图构建地图。在map init上,我调用一个返回此数据的json方法:
for ($i = 1;$i=$numrows; $i++) {
$sql= "INSERT INTO orderItem(order_id,item_linenum,product_id,item_quantity,item_unitprice)
VALUES(".$_REQUEST["orderNumber"]."$i,'".$_REQUEST["product".$i]."','".$_REQUEST['quantity'.$i]."'," .$_REQUEST['unit'.$i].")";
print "*" . $sql. "*" . "<br/>";
$result= mysqli_query($db, $sql) or die("SQL error: " . mysqli_error());
}
通过这些数据,我将其添加到地图的数据提供者(mapData)中:
[{latitude: "40.4258686",longitude: "-86.9080655"}]
不使用世界地图时是否需要转换纬度/经度坐标?如果是这样,怎么办呢?
编辑:修正了JSON字符串错误
答案 0 :(得分:7)
您似乎正在使用未经校准的美国地图。 (usaLow.js)此地图因视觉目的而失真,因此与真实的纬度/经度坐标不兼容。
要解决此问题,您需要使用其中一张 校准的地图。选项如下:
它是Mercator校准的美国大陆。除了阿拉斯加和夏威夷之外,标记应该标记为OK,该区域已经移位。
此地图与坐标完全兼容,包括阿拉斯加和夏威夷。但是,它可能看起来不那么有吸引力:
这两张地图都与JavaScript地图捆绑在一起。
答案 1 :(得分:1)
我知道这是一个古老的问题,但我想出了一个可以帮助其他人使用AmCharts.maps.usa2High的解决方案。
如果我知道我正在阿拉斯加或夏威夷绘制一个点,我可以采用真正的纬度/经度并将其缩放/转换为适用于Ammap的纬度/经度。要做到这一点,我只需要在阿拉斯加的Ammap案例中获得2分,安克雷奇和朱诺。使用Ammap开发工具,我能够近似这些位置。这是我如何使它工作。我使用了一个名为Big.js的工具来更准确地进行数学计算 - https://github.com/MikeMcl/big.js/
注意:位置是一个包含我的地址的数组。
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
if(locations[index].state.toLowerCase() == 'ak' || locations[index].state.toLowerCase() == 'alaska'){
//Use 2 points to translate the coordinates
//anchorage
//normal coords
var ax1 = new Big(61.2180556);
var ay1 = new Big(-149.90027780000003);
//ammap coords
var bx1 = new Big(20.7413);
var by1 = new Big(-115.1221);
//juneau
//normal coords
var ax2 = new Big(58.3019444);
var ay2 = new Big(-134.41972220000002);
//ammap coords
var bx2 = new Big(18.9596);
var by2 = new Big(-109.7574);
//find the scale of Ammaps Alaska vs. actual lat/lng coords
var latScale = (bx1.minus(bx2)).div(ax1.minus(ax2));
var lngScale = (by1.minus(by2)).div(ay1.minus(ay2));
//get the new translated point by using the 2 existing points and
lat = bx2.plus(latScale.times((new Big(lat)).minus(ax2)));
lng = by2.plus(lngScale.times((new Big(lng)).minus(ay2)));
}
if(locations[index].state.toLowerCase() == 'hi' || locations[index].state.toLowerCase() == 'hawaii'){
//Use 2 points to translate the coordinates
//honolulu
//normal coords
var ax1 = new Big(21.3069444);
var ay1 = new Big(-157.85833330000003);
//ammap coords
var bx1 = new Big(24.1081);
var by1 = new Big(-104.5377);
//normal coords
var ax2 = new Big(20.7983626);
var ay2 = new Big(-156.33192529999997);
//ammap coords
var bx2 = new Big(23.5082);
var by2 = new Big(-102.5078);
//find the scale of Ammaps Hawaii vs. actual lat/lng coords
var latScale = (bx1.minus(bx2)).div(ax1.minus(ax2));
var lngScale = (by1.minus(by2)).div(ay1.minus(ay2));
//get the new translated point by using the 2 existing points and
lat = bx2.plus(latScale.times((new Big(lat)).minus(ax2)));
lng = by2.plus(lngScale.times((new Big(lng)).minus(ay2)));
}