16

所以我正在编写一个 Javascript 库,它采用 x,y 坐标并使用它们来绘制美国地图。为此,我需要找到绘制每个状态所需的坐标数据。维基百科上的这张地图是我需要的一个很好的例子,因为 SVG 文件包含构成每个状态的形状,并很好地标记:http: //upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svg

我还有一组需要放置在此地图上的站点。由于我知道每个站点的纬度和经度,我可以使用它在地图上的适当位置绘制每个站点。不幸的是,为此,我的地图需要使用墨卡托投影,这样就可以轻松地将 lat,long 映射到 x,y 像素坐标。

我上面提到的维基百科地图使用了其他一些投影,所以我不能将它用于此目的。有谁知道在墨卡托投影中哪里可以找到这种类型的地图数据?任何数据格式都可以,只要我能以编程方式获取用于绘制每个状态的坐标并确定哪些形状构成每个状态。

4

9 回答 9

5

这是一个 GIS 问题,除非您使用适当的工具,否则不会轻易解决。

  • 使用QGIS打开美国Shapefile数据

    编辑如果我链接到的 shapefile 不完全是您正在寻找的那些,那么谷歌搜索“美国 shapefile”。Shapefiles 实际上是一组地理空间文件(而不仅仅是一个文件)。

  • 将您的图层重新投影到指定的投影

    编辑这可能很麻烦,但以防万一,它不会重新投影(见下文)。EPSG 是从空间参考中获得的

  • 使用ogr2ogr ( cheatsheet ) 或转换器插件将您的数据转换为 KML。这将以谷歌地图/地球/人类可读格式输出您的数据,其中包含坐标

编辑 2 你用什么来显示在线地图?你考虑过 openlayersGoogle maps APImapserver

编辑 3 我在我拥有的一些数据上测试了我的方法并且它有效,这是使用“状态和等效(当前)”图层的一个多边形的示例输出:

<Placemark>
      <name>American Samoa</name>
      <styleUrl>#PolyStyle00</styleUrl>
      <Snippet></Snippet>
      <MultiGeometry>
        <Polygon>
          <tessellate>1</tessellate>
          <extrude>0</extrude>
          <altitudeMode>clampToGround</altitudeMode>
          <outerBoundaryIs><LinearRing><coordinates> -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000100,0.000000 -0.001536,-0.000100,0.000000 -0.001536,-0.000100,0.000000 -0.001536,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000100,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001537,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000 -0.001536,-0.000099,0.000000</coordinates>
            </LinearRing>
          </outerBoundaryIs>
        </Polygon>
于 2010-02-22T17:24:09.650 回答
5

Kevin McCurley在墨卡托投影中创建了一些美国地图,包括所有 50 个州的地图如果您查看该最终链接的来源,它由状态轮廓的 (latitude, longitude) 对组成,然后将其转换为 (x, y) 对以以 svg 格式显示。他允许的用法是

随意使用这些文件以您自己的乐趣,但我将不胜感激获得创建它们的功劳。享受...

我不知道这对你来说是否足够好。

于 2010-02-22T17:58:15.600 回答
3

从头开始的新地图

从 USGS 以相当高分辨率提供的免费shapefile创建地图很容易。实际上,有些人已经创建了一个shapefile->svg 翻译脚本,它可以为您完成这项工作,但请注意该项目已移至 GitHub

不幸的是,shapefile 位于NAD83 投影中,因此在运行脚本之前需要将其重新投影到墨卡托。同样,这是一个已经解决的问题,也是GIS中非常常见的事情,只需要完成一次。为此,我将建议MapWindow,因为这样做很简单。

要将 shapefile 重新投影到墨卡托,您需要下载并安装MapWindow。运行程序时,您可以在主窗口中看到插件菜单,您需要启用GIS 工具插件。然后单击绿色的“加号”符号将 shapefile 添加到 MapWindow 中,它应该在屏幕上呈现美国。

将 shapefile 导入 MapWindow 后,您将对其进行重新投影。为此,您单击GIS Tools -> Vector -> Reproject a Shapefile,它应该会打开一个对话框。

您看到的第一个对话框询问您想要什么投影:

  • 类别:投影坐标系
  • 组:世界
  • 名称:墨卡托(世界)

第二个可能不会出现,但如果出现,它会询问当前的投影:

  • 类别:地理坐标系
  • 组:北美
  • 名称:北美基准 1983

此过程应创建一个名为statesp020_reprojected或类似名称的新 shapefile。

您现在需要使用上面的脚本将 shpaefile 转换为 SVG 。我不会费心为此编写说明,因为我以前没有尝试过,但我相信你能弄清楚!

于 2010-02-25T15:09:58.520 回答
2

在这里: http
://www.nws.noaa.gov/geodata/catalog/national/html/us_state.htm 您可以下载包含shp数据的文件。该shape格式包括dbf带有一些属性的 a,包括每个状态的坐标。

此外,您可以使用shp2text提取所有信息。

编辑: 地图中的数据位于 1983 年的北美基准中,但您可以使用此处的电子表格和公式转换为墨卡托 (UTM)。

于 2010-02-22T16:44:50.893 回答
1

您看过 NIMA 产品吗? http://egsc.usgs.gov/nimamaps/https://www1.nga.mil/ProductsServices/Pages/default.aspx 他们有各种各样的地图,格式等等,都是我们纳税人买的,所以很多东西都可供公众使用。地图的第一站。

于 2010-02-20T01:21:18.847 回答
1

我从来没有做过你要问的那种工作,但在我看来,来自美国陆军工程兵团的这些数据对你很有用:

http://crunch.tec.army.mil/software/corpscon/corpscon.html

于 2010-02-22T16:04:58.673 回答
1

visokio.com 在这里有可下载的矢量地图集合:http: //www.visokio.com/maps 其中大多数支持十进制纬度/经度坐标。

但是,看起来所有内容都采用专有格式,只能使用他们自己的软件查看。一个试用软件是可用的,寿。

hth。

编辑:浏览维基百科时遇到这些:

于 2010-02-22T16:27:44.547 回答
1

Indieprojector应该能够生成您需要的文件。这是一个免费的在线工具,可以重新投影任何 shapefile 并将其再次导出为 .svg。他们甚至在线包含美国各州,因此您无需弄乱 Shapefile。

于 2010-02-22T17:26:57.827 回答
1

这是从 lat long 到 mercator 的 JS 数学的 stackoverflow 响应

将纬度/经度转换为 X/Y 坐标

下载上面列出的那些 shapefile 之一,然后使用 OGR 执行 ogr2ogr 以转换为 CSV

在这里获取 OGR

http://www.gdal.org/ogr/index.html

这是 OGR 的文档

http://www.gdal.org/ogr2ogr.html

这是输出格式的名称

http://www.gdal.org/ogr/ogr_formats.html

鉴于您的声誉,我知道您可以在将其转换为 CSV 后处理它

于 2010-02-24T05:24:11.380 回答