Kartograph Python脚本生成的SVG具有错误的纬度/经度坐标。

6
我已经修改了这个问题,以反映发现问题的一些进展。我正在使用以下Python代码生成美国大陆的SVG。Shapefile是无关紧要的,因为我描述的问题不管使用什么shapefile都会发生。脚本非常简单。我基本上只是拿到了一个美国的shapefile,并使用边框框选来排除夏威夷和阿拉斯加。
from kartograph import Kartograph

K = Kartograph()

blah={
    "layers": [
        {
        "id":"mylayer",
        "src":"/Users/austinc/Documents/shapefiles/states_21basic/states.shp",
        }
    ],
    "bounds":{
        "mode":"bbox",
        "data":[-130,25,-65,50],
    },
    "proj":{
        "id":"mercator"
    }
}

K.generate(blah,outfile='/Users/austinc/Desktop/mymap.svg')

这段代码生成的SVG存在不正确的坐标。当我使用JavaScript尝试在其上映射点时,这些点的纬度是正确的,但经度偏差约100度。当我使用Kartograph的预制SVG时,没有这个问题(但我尚未尝试裁剪阿拉斯加和夏威夷)。因此,我的Python脚本中有一些引起此问题的东西,但我不明白是什么原因。已解决:下面的评论让我想到这可能与投影有关。我删除了Python脚本绘制图形的部分Mercator 投影,这样就解决了所有问题。我不确定为什么会这样,但如果你遇到类似的问题并且看到这篇文章,请尝试更改投影或根本不使用投影。

奇怪,我刚刚让它工作了,有点。我通过将纽约的纬度更改为-173来实现的。现在它在地图上了。我是否基本上误解了某种地理事物?根据几个在线来源,纽约的经度是-73。Kartograph 有问题还是我漏掉了什么? - AustinC
同样的问题也出现在洛杉矶。所有的经度都偏移了100度。 - AustinC
你尝试过将经度转换为正数吗?-73.94 -> 286.06(加上360) - Roger Veciana
是的,这就是我之前尝试时说改变了经度的那次。286不起作用。我没想到要尝试其他负经度。似乎如果我将所有经度向左平移100度,则一切都可以正常工作,这解决了问题,但这是一个非常不令人满意的解决方案。 - AustinC
1
也许是用Python脚本生成的SVG文件'mymap.svg'出了问题,而不是JavaScript代码。如果SVG坐标被移动了,那么脚本就会失败。需要考虑可能出现的问题。 - Roger Veciana
显示剩余3条评论
1个回答

1
可能你的SVG文件中使用的坐标系与纬度和经度不一致。你可能需要知道生成SVG文件时使用了哪种投影方式,并通过使用该投影方式的反函数计算纬度和经度。 也许还可以尝试查看Kartograph提供的现成地图是否存在相同的问题。

我认为其中的纬度是正确的。我知道这是墨卡托投影。我已经添加了生成SVG所使用的Python代码到原始帖子中。我也尝试过来自完全不同来源的形状文件。您能解释一下通过投影的反函数计算纬度和经度是什么意思吗?我将尝试Kartograph的预制美国地图,并查看其效果如何。 - AustinC
好的,我尝试了Kartograph SVG,它完美地工作了。所以我猜我的SVG可能有错误的坐标系统。为什么我的Python代码会生成这样的结果呢?看起来对我来说像是与边界框有关吗? - AustinC
这似乎是该库的一个持续性问题。我使用kartograph.py制作的地图看起来很棒,但是它们的坐标是错误的,因此它们无法用于在kartograph.js中绘制符号或任何其他内容。当我使用上面链接的Kartograph SVG时,它也为我工作正常。我认为这是一个巨大的问题,并且从其他问题http://stackoverflow.com/questions/27799912/kartograph-add-symbol-coordinates 看来,这可能与地图投影有关。这个问题应该由库的创建者解决。 - cheenbabes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接