我有兴趣写一个简化的导航的应用程序作为一种宠物项目。之后的寻找免费的地图的数据,我们决定 美国人口普查局的老虎 2007线/要素的地图数据。数据分成zip文件对各个国家和我已经下载了一个县的地图的数据对于我的区域。

什么是最好的方式来阅读在这个地图数据放入一个可用的格式?

我应该怎么:

  • 在阅读这些文件
  • 分析它们经常表达或一些图书馆,已经可以分析这些形状文件?
  • 将数据加载到我的申请-我应该负荷点直接进入一些datastructure在的记忆?使用一个小型的数据库?我没有必要的坚持,一旦你接近应用的地图的数据。用户可以负载的要素。

什么是最好的方式渲染的地图,一旦我有阅读的要素的数据?

理想情况下,我想要能够在一个县的地图的数据要素和使所有的聚线到屏幕上,并允许旋转和扩展。

我应该怎么:

  • 转换纬度/经度分到屏幕上的坐标?-就我知道的要素利用经度和纬度对其点。所以很明显我需要转换这些以某种方式屏幕坐标显示的地图的功能。
  • 渲染的地图的数据(一系列折线道路、边界等等)的一种方式,我可以很容易地旋转和规模,整个地图?
  • 呈现我的整个地图作了一系列的"砖"所以只有设/行的观察区域内呈现的?

前。老虎的数据呈现为一个显示的地图:
alt text

任何人都有一些经验,并深入了解什么是最好的方式对我来说,在阅读这些文件,我应该表示它们(数据库,内存datastructure)在我的程序,并且我应该怎么渲染(与转/扩展)的数据在屏幕上将不胜感激。

编辑:为了澄清,我不想用任何Google和雅虎的地图。同样,我不想使用地.我在寻找一个更从头开始的方法比采用这些api/程序。这将是一个 桌面 应用程序。

有帮助吗?

解决方案

第一,我建议您使用 2008年虎文件.

第二,正如其他人指出也有很多项目现在已经阅读、解释、转换和使用数据。建设自己的分析器,这一数据几乎是微不足道,虽然如此,没有理由通过另一个项目代码并尝试提取你需要什么除非你打算使用它们的项目作为一个整体。

如果你要从开始的较低水平

建立你自己的老虎解析(合理的容易-只是一个数据库的线段),并建立一个简单呈现上(线、面的信件/名称)也将是相当容易的。你会想看看的各个 地图投影类型 对呈现相。最经常使用(和因此最熟悉的用户)是的 墨卡托投影 -这是相当简单和快速。你可能想要发挥与支助其他的预测。

这将提供一点乐趣在看如何项目地图,以及如何扭转这一投(说一个用户点击的地图,你要见的纬度/经度他们点击的-需要扭转当前的投影式).

渲染

当我开发的我的呈示我决定我的窗户上的一个固定的尺寸(嵌入式装置),一个固定的放大倍数。这意味着,我可能中心的地图,在纬度/经度,以及有中心像素=中心纬度/经度在给定的放大,并给予墨卡托投影,我可以计算这素表示的每一纬度/经度,反之亦然。

一些程序,而不是允许的窗口各不相同,而不是使用放大镜和一个固定点,他们使用的两个固定点(经常上左右下角形的限定窗口)。在这种情况下,它变得微不足道确定像素纬度/经度传送的-这只是几个插补计算。旋转和扩展使这种转移功能的更复杂一点,但是不应该大大使-它仍然是一个矩形窗口插值,但窗口角落不需要在任何特定的方向相对于北方。这增加了几个案例(你可以把地图里面出来,并认为如果从地球内部,例如),但这些都不是繁重的,并且可以处理作为你的工作。

一旦你得到了纬度/经度要素转移做,呈现行和面是相当简单的除了正常的图形问题(例如边缘线或面的重叠不恰当的,防叠,等等)。但是呈现一个基本的丑陋的地图,比如它所做的许多开放源码渲染是相当直截了当的。

你也可以一起玩的距离和大圆计算,例如一个很好的经验法则是,每一度的纬度或经在赤道大约为111.1公里-但是一个更改为你接近两极,同时,其他继续留在111.1公里。

存储和结构

你是如何储存和参照的数据,但是,在很大程度上取决于什么你打算这样做。很多困难问题,如果你想使用相同的数据库结构于人口统计vs路-一定数据的基础结构和索引编制将会快速一,并且缓慢。

使用邮编和载入只在附近的邮编工作的小型地图绘制项目,但是如果你需要一个路线横穿的国家需要不同的结构。一些实现有重叠的数据库,它仅包含的主要道路和捕捉路线复盖(或是通过多重叠-地方、地、县、州、国家)。这个结果很快,但有时效率低下的路由选择。

切片

切片你的地图实际上是不容易的。在较低的倍,你可以呈现一个整体的地图,并把它切。在较高倍放大你不能呈现整个事情在一次(由于存空间的限制),所以你必须要切它了。

切割线至边界的瓦所以你可以呈现单独的砖结果在不完美的成果往往是做什么是线呈现的超越瓦边界(或者,在少数据线的终端是保持,虽然呈现停止一旦发现已经关闭的边缘)-这可减少误差发生的线看起来像他们不完全匹配,因为他们旅行跨瓷砖。

你会看到我在说什么因为你的工作在这个问题。

这是不容易找到的数据,进入了一个给予瓷砖,以及一线可能有两端之外给出的瓷砖,但旅行跨瓦。你会需要咨询图书关于这个(迈克尔*阿卜拉什的书是精准, 自由现已在前面的链接)。虽然谈判的主要是关于游戏,开窗口、裁剪、多面的边缘,碰撞等所有适用于此。

但是,你可能会想发挥一个更高的水平。

一旦你已经上完成(无论是通过调整现有项目,或做上述自己),您可能想要发挥与其他方案和算法。

反地理编码是相当容易的。 输入纬度/经度(或者点击图)和获得的最近的地址。这个教你如何解释地址沿线段在虎数据。

基本地理编码是一个困难的问题。 书写地址的分析程序是一个有用的和有意思的项目,然后转换成经纬度/经度使用老虎的数据是非微不足道,但很多的乐趣。启动简单和小通过要求的确切名称和格式匹配,然后开始看到"喜欢"配和音匹配。有很多这方面的研究-看看搜索引擎项目帮助一些在这里。

找到两点之间的最短路径是一个不平凡的问题。 有许许多多的算法这样做,其中大多数都申请专利。我建议,如果尝试这样去与一个简单的算法自己设计的,然后做一些研究和比较你的设计的技术。这是一个很好玩如果你到图论。

下一个路径和先发制人发出指示 是不容易的,因为它看起来一脸红。给定的一套指令有关联阵的纬度/经度对'跟'的路线,使用外部输入(GPS或模拟的GPS)和开发了一种算法,使用户指令,因为他们的做法每一个真正的交叉路口。注意到有更多的纬度/经度对于说明由于弯曲的道路,等等,你会需要检测方向等等。很多角情况下你不会看到你努力实现它。

点感兴趣搜索。 这是一个有趣的-你需要找到目前的位置,以及所有感兴趣的点(不一部分,老虎,使自己或获得的另一个来源)在一定距离内(如乌鸦飞,或者难驾驶距离的)的来源。这一有趣的是,你必须转换POI数据库的格式,很容易搜索,在这种情况。你不能把时间要经过数以百万计的项目,执行距离计算(sqrt(x^2+y^2))和返回的结果。你需要有一些方法或算削减量的数据下降的第一个。

旅行推销员。 路有多个目的地。只是一个更难的版本的常规路由。

你可以找到的链接数量许多项目和信息来源于这个问题 在这里,.

运气好的话,并请布不管你做什么,无论如何基本或丑,以便其他人可以受益!

-亚当

其他提示

SharpMap 是一个开放源。网2.0的映射引擎用于它,ASP.NET.这可以提供的所有功能需要。它处理的最常见的GIS向量和光栅数据格式,包括ESRI而.

该方案是:

  • 地理空间服务器就像地图服务器,geoserver、学位(开放源代码).

他们可以阅读和服务而(和许多其他的事情).例如,geoserver(时装)服务的数据来自美国人口普查局的老虎而作演示

  • javascript制图库像openlayers(见的例子 链接文本

有很多例子在网络上使用这个解决方案

有趣的问题。这里就是我如何做它。

我收集的任何几何我需要的任何格式的他们进来。我已经拉数据从美国地质调查局,因此这一群:

然后我写了一个程序,即"汇编"这些形状的定义成一种形式,是有效渲染。这意味着做任何预测和数据格式转换,都需要有效地显示的数据。一些细节:

  • 2D应用程序,可以使用任何投影,你想: 地图投影.
  • 3D,你想要转换这些纬度/经度变成3D坐标。这里是一些数学上如何做到这一点: 转变 球坐标到正常的角坐标.
  • 打破了所有的原语进入一个四分树/八叉树(2D/3D)。叶节点,在这棵树包含参考文献,所有的几何相交,叶节点(轴盟)的边界。(这意味着一块的几何形状可以引用一次以上。)
  • 几何随后被分割成一个表格的折点,并表绘制命令。这是一个理想的格式照片.命令可以发出经过 glDrawArrays 使用的折点缓冲区(顶点缓冲的对象).
  • 一般的游客的模式是用来走路的叉树/八叉树.走涉及测试是否访问者相交给点直到树叶节点。访问者包括:绘图、碰撞探测,并选择。(因为树叶可以包含重复引用几何形状、助行器的标记作为节点的访问,并忽视他们之后。这些标记必须以重置或以其他方式更新之前做的下一步行。)
  • 使用空间分区系统(一种树)和绘图有效代表权至关重要的是实现高帧率。我们发现,在这些类型的应用,你想要你的框架率尽可能高20》在最低限度。更不用说事实上,许多表现会给你很多的机会创造一个更好看的地图。(我是好看,但是会到那里的某一天。)
  • 空间划分的帮助呈现减少的数目的命令发送给处理器。然而,有可能来的时候,用户实际上想要查整个数据集(或许是一个arial图)。在这种情况下,需要的详细程度的控制系统。因为我的应用程序处理街道,我得到优先的公路和大道路。我的绘画代码知道如何多元的,我可以借鉴之前,我framerate下降。这元也按这个优先事项。我画的只有第一 x 项目 x 是多元的,我可以画出我所需帧率。

剩下的就是摄像机控制和动画的任何数据要显示。

这里是一些例子,我的现有执行情况:

图片http://seabusmap.com/assets/Picture%205.png 图片http://seabusmap.com/assets/Picture%207.png

用于储存虎数据在当地,我会选择了 Postgresqlpostgis 工具。

他们有一个令人印象深刻的收集工具,特别是对你 老虎的地理编码器 提供良好的方式对进口和使用的老虎的数据。

你需要看看工具,与postgis,最有可能是某种 地图服务器

http://postgis.refractions.net/documentation/:

现在有几个开放源码工具的工作,并与PostGIS.所)开启主界面的项目正在开发一个全面的读写桌面环境中,可以与PostGIS。互联网映射、明尼苏达大学的地图服务器可以使用PostGIS作为数据来源。该GeoTools Java GIS工具包PostGIS支持,作为不GeoServer网络要素服务器。草地支持PostGIS作为数据来源。跳Java桌面GIS观众有一个简单的插件对于阅读PostGIS数据,并QGIS桌面具有良好的PostGIS支持。PostGIS数据可以被出口到几个输出GIS格式正在使用的OGR C++图书馆和命令行工具(和五言与捆绑的形文件翻车).当然任何的语言,它可以与PostgreSQL可以与PostGIS--这份名单包括Perl,PHP,蟒蛇,TCL、C、C++、Java、C号和更多。

编辑:depite地图服务器具有字服务器,在它的名字,这将是可用的,在一个桌面环境。

虽然你已经决定使用老虎的数据,你可能会感兴趣 OSM(开街道地图), ,因为OSM有一个完整的进口老虎的数据,丰富的用户贡献的数据。如果你坚持到老虎的格式,你的应用将是无用的国际用户,OSM你的老虎和其他一切。

OSM是一个开放项目,设有一个协作编辑自由的世界地图。你可以得到所有这些数据以及结构化的XML,查询区域或下载整个世界,在一个大型的文件。

有一些地图的呈示器OSM可用的各种编程语言,他们大多数开放源,但是仍然有许多工作要做。

此外,还有一个 OSM路由服务 可用。它有一个网络的界面,可能也是可查询通过网络服务。再次,它不是所有完成。用户可以使用一台台式或移动路由应用程序建立在这样的。

甚至如果你不决定要去那个项目,可以得到很多灵感。只是看看 项目wiki 和来源的各种软件的项目,其中涉及(你会找到链接到他们内部的wiki).

你可能也与微软合作的视觉地球映射应用和api或使用谷歌的api。我总是在编程的商与ESRI产品并没有发挥与开api的那么多。

此外,您可能想要看看!和搜索!他们是相对较新的程序,但我认为他们是免费的。可能会被限制在嵌入的数据。制造商 可以在这里找到。

问题是空间处理是相当新的在非商业规模。

如果你不介意多付的解决方案 安全软件 产生的产品称为FME.这个工具将帮助你把数据从任何格式的任何其他。包括KML的谷歌地球的格式或使它作为一个JPEG(或一系列JPEGs).转换后的数据,你可以嵌入谷歌地球到应用程序使用他们的 API 或者只是显示的瓷砖的图像。

作为一个侧面不FME是一个非常强大的平台,所以同时做你的翻译可以添加或删除的部分的数据不一定需要。合并来源,如果你有多于一个。把坐标(我不记得什么谷歌地球用).备份存储在数据库。但是说真的如果你愿意掏出几块钱,你应该看看这个。

你还可以创建的标志(就像在你的样本地图),其中含有位置(把它放在哪里)和其他数据/评论的位置。这些标志有多种形状和大小。

一个简化过Mercator或其他投射是假设一个不断转换因子为纬度和经度。乘纬度的69.172里;对经挑选的中纬度地图区域和乘(有180经度)由余弦(middle_latitude)*69.172.一旦你已经转化为英里,可以使用另一套的转换要得到屏幕上的坐标。

这是什么工作对我来说早在1979年。

我来源的数英里的程度。

当我把这个回答的问题是标记

"什么是最好的方式呈现的一个要素(地图的数据)与折线。净?"

现在它是一个不同的问题,但我离开我的答复到原来的问题。

我写了一个.网版本,能画 向量数据(如几何图形 一个小水电文件)使用简单的GDI+。它的 是相当有趣。

其原因是,我们需要 处理的不同版本 几何形状和属性与一个新城市 额外信息,以便我们可以 不使用商用部件或地图 一个开放源之一。

主要的事情时这样做是 建立一个视和 翻译/变换WGIS84坐标 一个缩减和GDI+x、y 坐标和等待与投影 如果你甚至需要重新投影。

一种解决办法是使用MapXtreme.他们有API for Java和C#。API能够装载这些文件并呈现它们。

Java:

http://www.mapinfo.com/products/developer-tools/desktop%2c-mobile-%26-internet-offering/mapxtreme-java

为。网:

http://www.mapinfo.com/products/developer-tools/desktop%2c-mobile-%26-internet-offering/mapxtreme-2008

我用这个解决方案在桌面应用程序和它的工作。它提供了更多,只有渲染的信息。

现在这样做的从头开始可能需要相当长的一段时间。他们有一个评估版,可以下载。我认为这只是打印"MAPXTREME"的地位,作为一个水印,但它完全是无用的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top