在Google地图视口中显示所有街道

时间:2013-05-11 09:13:11

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

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

  1. 等待平移或缩放。
  2. 查询视口(范围)中可见的所有街道。
  3. 使用预定义颜色为每条可见街道着色。
  4. 例:
    我想展示每条街道上的企业数量,或每条街道犯下的罪行数量 我有一个DB,它拥有这种信息(街道名称,数据),但每行都没有位置数据 因此,在每个地图缩放或平移后,我无法通过地理边界矩形查询所有内容,使用Google自己的数据库并按街道名称查询它会更有效率。

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

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

2 个答案:

答案 0 :(得分:0)

我的理解是,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捕捉街道,单行道可能会让人感到悲伤,您可能需要注意这一点并更正或反转起点/终点。

答案 1 :(得分:-1)

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

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