我有兴趣将简单的导航应用程序编写为宠物项目。在搜索免费的地图数据后,我已经确定了US Census Bureau TIGER 2007 Line / Shapefile地图数据。数据被分成各个县的zip文件,我已经为我的区域下载了一个县的地图数据。
将此地图数据读入可用格式的最佳方式是什么?
我该怎么做:
在读取Shapefile数据后,渲染地图的最佳方法是什么?
理想情况下,我希望能够读取县地图数据shapefile并将所有多边形线渲染到屏幕上并允许旋转和缩放。
我该怎么做:
实施例。作为显示地图呈现的TIGER数据:
对于我在这些文件中阅读的最佳方式,我应该如何在程序中表示它们(数据库,在内存数据结构中)以及如何渲染(使用旋转/缩放)的任何人都有一些经验和洞察力的人屏幕上的地图数据将不胜感激。
编辑:为了澄清,我不想使用任何谷歌或雅虎地图API。同样,我不想使用OpenStreetMap。我正在寻找一种比使用那些apis /程序更划刮的方法。这将是桌面应用程序。
答案 0 :(得分:24)
答案 1 :(得分:14)
SharpMap是一个用于WinForms和ASP.NET的开源.NET 2.0映射引擎。这可能会提供您需要的所有功能。它涉及最常见的GIS矢量和栅格数据格式,包括ESRI shapefile。
答案 2 :(得分:7)
解决方案是:
他们可以阅读和提供shapefile(以及许多其他内容)。例如,geoserver(安装时)提供来自美国人口普查局TIGER shapefile的数据作为演示
网上有很多使用此解决方案的例子
答案 3 :(得分:5)
有趣的问题。我就是这样做的。
我收集了他们所需要的任何几何形状。我一直在从USGS中提取数据,所以这相当于一堆:
然后我编写了一个程序,将这些形状定义“编译”成一个有效渲染的形式。这意味着要进行有效显示数据所需的任何投影和数据格式转换。一些细节:
x
项,其中x
是我可以按照我想要的帧速率绘制的图元数。其余的是相机控制和想要显示的任何数据的动画。
以下是我现有实施的一些示例:
Picture http://seabusmap.com/assets/Picture%205.png Picture http://seabusmap.com/assets/Picture%207.png
答案 4 :(得分:2)
用于在本地存储老虎数据,我会使用Postgresql工具选择postgis。
他们拥有令人印象深刻的工具集,尤其是Tiger Geocoder提供了导入和使用老虎数据的好方法。
您需要查看与postgis交互的工具,很可能是某种mapserver
来自http://postgis.refractions.net/documentation/:
现在有几种与PostGIS一起使用的开源工具。 uDig项目正在开发一个可以直接与PostGIS一起使用的完整读/写桌面环境。对于互联网映射,明尼苏达大学Mapserver可以使用PostGIS作为数据源。 GeoTools Java GIS工具包支持PostGIS,GeoServer Web Feature Server也支持。 GRASS支持PostGIS作为数据源。 JUMP Java桌面GIS查看器有一个简单的插件,用于读取PostGIS数据,QGIS桌面具有良好的PostGIS支持。可以使用OGR C ++库和命令行工具(以及带有捆绑的Shape文件转储器的cource)将PostGIS数据导出为多种输出GIS格式。当然,任何可以与PostgreSQL一起使用的语言都可以与PostGIS一起使用 - 该列表包括Perl,PHP,Python,TCL,C,C ++,Java,C#等。
编辑:depite mapserver在其名称中包含单词SERVER,这将在桌面环境中使用。
答案 5 :(得分:2)
虽然您已经决定使用TIGER数据,但您可能对OSM (Open Street Map)感兴趣,因为OSM已完全导入其中的TIGER数据,并丰富了用户提供的数据。如果您坚持使用TIGER格式,您的应用程序对国际用户将毫无用处,使用OSM,您可以立即获得TIGER和其他所有内容。
OSM是一个开放式项目,具有协作编辑的免费世界地图。您可以获取所有这些数据以及结构良好的XML,查询区域或在大文件中下载整个世界。
OSM有一些地图渲染器可用于各种编程语言,其中大多数是开源的,但仍有很多工作要做。
还有一个OSM routing service可用。它有一个Web界面,也可以通过Web服务API查询。同样,它并非全部完成。用户肯定可以使用基于此构建的桌面或移动路由应用程序。
即使您没有决定参与该项目,您也可以从中获得很多灵感。只需查看project wiki以及所涉及的各种软件项目的来源(您将在维基内找到它们的链接)。
答案 6 :(得分:1)
您还可以使用Microsoft的可视化地球地图应用程序和api或使用Google的API。我总是使用ESRI产品进行商业编程,并且没有那么开放的api。
另外,你可能想看Maker!和Finder!它们是相对较新的程序,但我认为它们是免费的。可能仅限于嵌入数据。Maker可以在这里找到。
问题在于空间处理在非商业规模上是相当新的。
答案 7 :(得分:1)
当我给出这个答案时,问题被标记为
“在.Net中使用折线渲染Shapefile(地图数据)的最佳方法是什么?”
现在这是一个不同的问题,但我将答案留给原来的问题。
我写了一个可以绘制的.net版本 矢量数据(例如几何体) 一个shp文件)在c#中使用普通的GDI +。它 非常有趣。
原因是我们需要 处理不同版本的 几何和属性有很多 我们可以提供更多信息 不使用商业地图组件或 一个开源的。
这样做的主要原因是 建立一个视口和 翻译/转换WGIS84坐标 降级和GDI + x,y 坐标并等待投影 如果你甚至需要重新投影。
答案 8 :(得分:1)
如果您不介意为解决方案付费Safe Software生产一种名为FME的产品。此工具将帮助您将数据从任何格式转换为几乎任何其他格式。包括KML Google地球格式或将其渲染为JPEG(或一系列JPEG)。转换数据后,您可以使用API将Google地球嵌入到您的应用中,或者只显示平铺图像。
作为一方而非FME是一个非常强大的平台,因此在进行翻译时,您可以添加或删除不一定需要的部分数据。如果您有多个来源,请合并来源。转换坐标(我不记得谷歌地球使用的是什么)。将备份存储在数据库中。但严重的是,如果你愿意花几块钱,你应该研究一下。
您还可以创建包含位置(放置位置)的标记(与样本地图非常相似)以及有关位置的其他数据/注释。这些旗帜有多种形状和大小。
答案 9 :(得分:1)
对墨卡托或其他投影的一种简化是假设纬度和经度的恒定转换因子。将纬度乘以69.172英里;对于经度,选择地图区域的中纬度并乘以(180-经度)乘以余弦(middle_latitude)* 69.172。转换为里程后,您可以使用另一组转换来获取屏幕坐标。
这在1979年对我有用。
答案 10 :(得分:0)
一种解决方案是使用MapXtreme。他们有Java和C#的API。 API可以加载这些文件并进行渲染。
对于Java:
对于.NET:
我在桌面应用程序中使用了此解决方案并且运行良好。它提供了更多只有渲染信息。
现在从头做这个可能需要一段时间。他们有一个可以下载的评估版本。我认为它只是在地图上打印“MAPXTREME”作为水印,但它完全可用,否则