我正在尝试使用以下算法构建地图:
- 等待平移或缩放发生。
- 查询视口中可见的所有街道(范围)。
- 使用预定义的颜色为每条可见街道着色。
Example:
我想显示每条街道上的企业数量,或者每条街道上发生的犯罪数量。
我有一个数据库,其中包含此类信息(街道名称、数据),但每一行没有位置数据。
因此,在每次地图缩放或平移之后,我无法通过地理边界矩形查询所有地图,使用 Google 自己的数据库并通过街道名称查询会更有效。
我知道如何注册平移和缩放事件。
我知道怎么做计算视口坐标 https://stackoverflow.com/questions/2393531/calculating-google-maps-viewport.
我知道怎么做给一条街道上色 https://stackoverflow.com/questions/13310776/google-maps-api-is-it-possible-to-highlight-specific-streets.
如何获取视口中可见的所有街道的列表?
欢迎任何其他解决方案或架构。
首选解决方案不会使用 Google DirectionsService 或 DirectionsRenderer,因为它们会减慢地图速度。
我的理解是,你所问的问题在 Google API 中是不可能的。多边形内的反向地理编码不是他们提供的服务。其他网站上有一些帖子(例如https://gis.stackexchange.com/questions/22816/how-to-reverse-geocode-without-google https://gis.stackexchange.com/questions/22816/how-to-reverse-geocode-without-google)与参考gisgraphy.com http://www.gisgraphy.com/看起来像一个非常简洁的反向地理编码工具。
然而,这仍然不能解决多边形问题中的所有街道。我think你唯一的选择就是获取数据(打开街道地图 http://www.openstreetmap.org/)并自己编写代码。此外 - 如果您要在大面积上执行此操作,我会采用我在这里推荐的网格方法:https://stackoverflow.com/a/18420564/1803682 https://stackoverflow.com/a/18420564/1803682
我将创建网格元素,并为每条街道计算它所属的所有网格并将其存储在数据库中。然后,当您搜索多边形时,您将计算多边形重叠的所有网格,然后可以测试每个正方形中的道路数据子集以确定重叠。
我对此进行了研究,并在几个月前放弃了类似的要求,但仍然希望实现它。多边形工作中的大部分点/线都发生在我的应用程序中创建的数据(即不是街道数据)上,现在这是我将包含的唯一数据。我想说的是——我希望有人能给你更好的答案。
Update:
对于你所问的问题,我仍然相信你需要混合使用基于 OpenStreetMap 的你自己的数据库和预先进行的某种网格分析。如果您有一些时间致力于该项目,那么处理起来应该不会太糟糕。数据库将会很大,并且所需的计算可能需要大量的一次性/前期处理时间。至于在视口中突出显示路线/道路/任何内容,有很多方法可以使用 API 来完成此操作 - 这里的示例我发现很有用:使用谷歌地图 API v3 折线捕捉到道路 https://stackoverflow.com/questions/10513360/polyline-snap-to-road-using-google-maps-api-v3
也有用:http://econym.org.uk/gmap/snap.htm http://econym.org.uk/gmap/snap.htm
请注意,如果使用方向 api 捕捉街道,单向街道可能会带来一些麻烦,您可能需要注意这一点并纠正或反转起点/终点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)