【问题标题】:Getting all streets visible in Google map's viewport在 Google 地图视口中显示所有街道
【发布时间】:2013-05-11 09:13:10
【问题描述】:

我正在尝试使用以下算法构建地图:

  1. 等待平移或缩放。
  2. 查询视口中可见的所有街道(范围)。
  3. 用预定义的颜色为每条可见街道着色。

示例:
我想显示每条街道上的商家数量,或每条街道上发生的犯罪数量。
我有一个保存此类信息(街道名称、数据)的数据库,但每一行都没有位置数据。
因此,在每次地图缩放或平移后,我无法通过地理边界矩形查询所有地图,使用谷歌自己的数据库并通过街道名称查询会效率更高。

我知道如何注册平移和缩放事件。
我知道如何calculate the viewport coordinates
我知道如何color a single street

如何获取视口中所有可见街道的列表?
欢迎任何其他解决方案或架构。 首选解决方案不会使用 Google DirectionsService 或 DirectionsRenderer,因为它们会减慢地图速度。

【问题讨论】:

  • 你好.. 只是对我的问题的跟进.. :)

标签: google-maps google-maps-api-3


【解决方案1】:

我的理解是,您所要求的内容无法通过 Google API 实现。多边形内的反向地理编码不是他们提供的服务。其他网站上的一些帖子(例如https://gis.stackexchange.com/questions/22816/how-to-reverse-geocode-without-google)参考gisgraphy.com 看起来像是一个非常简洁的反向地理编码工具。

但是,这仍然不能解决多边形问题中的所有街道。我认为您唯一的选择是获取数据 (Open Street Maps) 并自己编写代码。此外 - 如果您要在大面积上执行此操作,我会采用我在此处推荐的网格方法:https://stackoverflow.com/a/18420564/1803682

我将创建我的网格元素,并为每条街道计算它所属的所有网格并存储在数据库中。然后,当您搜索多边形时,您将计算多边形重叠的所有网格,然后可以测试每个正方形中的道路数据子集以确定重叠。

我对此进行了研究,并在几个月前放弃了类似的要求,但仍然希望实现它。多边形工作中的大部分点/线都发生在我的应用程序中创建的数据(即不是街道数据)上,现在这是我将包括的唯一数据。我想说的是 - 我希望有人给你一个更好的答案。

更新:

对于您的要求,我仍然相信您需要混合使用基于 OpenStreetMap 的自己的数据库和预先执行的某种网格分析。如果您有时间致力于该项目,那么这应该不会太糟糕而无法处理。数据库将很大,所需的计算可能需要大量的一次性/前期处理时间。至于在视口中突出显示路线/道路/任何内容,有很多方法可以使用 API 来实现这一点 - 我发现这里的示例很有用:polyline snap to road using google maps api v3

也有用:http://econym.org.uk/gmap/snap.htm

请注意,如果使用方向 api 捕捉到街道,街道可能会带来一些麻烦,您可能需要注意这一点并更正或反转起点/终点。

【讨论】:

  • 感谢您的回答。请参阅我对上述答案的回复。
  • @toy4fun 已更新响应。
【解决方案2】:

Google 建议使用 Geocoding Service 来使用坐标填充您的数据库。然后,您可以使用LatLng Bounds Class 方法“包含”来检查您的点是否位于视口内。这种方法的优点是您只需要对信息进行一次地理编码然后将其存储,而不是在每次视口更改时发送编码请求。

显示此类数据的另一种有效方法可能是使用 google 融合表。这大大简化了数据与地图的集成。

【讨论】:

  • 这适用于有限数据上的点,但不适用于多边形内的所有道路(即视口) - 除非您谈论的是一组非常有限的区域。
  • ... 并且愿意将线外推到彼此相距一定距离内的一系列点,这样您就会对边缘情况(1m、10m、1km?)的结果感到满意真正想要的是线/多边形多边形/多边形交叉点,它比多边形中的点更复杂,并且不是由 API 提供的。数学!:en.wikipedia.org/wiki/Line-line_intersection
  • 感谢您的回答。我可以使用DirectionsService 推断街道点并将其存储在我的数据库中。它将占用大量空间。第二个问题是如何给每条街道上色。 DirectionsRenderer 不能很好地处理单向街道。我仍在寻找更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
相关资源
最近更新 更多