您不能直接使用坐标,您首先必须将它们转换为基于投影的点。
对于墨卡托投影,你会发现这里的公式:https://stackoverflow.com/a/14457180/459897
根据这个公式支持JavaScript函数可能看起来像这样:
/**
*@param latLng object with properties lat and lng(of the coordinate)
*@return object with properties x and y(of the translated latLng)
**/
function latLng2point(latLng){
return {
x:(latLng.lng+180)*(256/360),
y:(256/2)-(256*Math.log(Math.tan((Math.PI/4)
+((latLng.lat*Math.PI/180)/2)))/(2*Math.PI))
};
}
通过这种转换路径的坐标功能。 svg中的一个路径是一系列x,y
对,由AniV的答案中看到的一个空格分隔(但我想你知道如何处理svg路径)。
当你转换路径,创建您存储4个变量:
- 的最小x值
- 最大-x值
- 的最小y值
- 最大y值
这些变量用于计算svg元素的viewBox
。
的4个参数的viewBox
是:
- X:使用
minX
- ÿ:使用
minY
- 宽度:使用
(maxX-minX)
- 高度:使用
(maxY-minY)
演示(绘图美国的形状):http://jsfiddle.net/doktormolle/9xhsL39u/
(注:演示加载地图的API,但仅用于路径解码的目的,所使用的路径是非常复杂并因此被编码。坐标转换/ svg绘图不需要maps-API)
完美地工作。没有使用解码和使用单个多边形,我不得不像这样格式化我的数据: var paths = []; ()函数(x){ paths.push(x.getArray()); }); – chris22smith
@ Dr.Mollie谢谢你的代码示例!我正在尝试将多边形渲染为轮廓而不是填充,这让我感到非常恐惧。只需将fill属性更改为none并设置笔划即可使用笔触颜色填充整个SVG,并且我没有尝试过调整路径格式。你对于如何实现大纲有什么看法? –
@DaveMorro:将'g'的填充设置为'none',并且为'path'(而不是'g')设置所需笔画https://jsfiddle.net/doktormolle/eg58oupw/ –