Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用地理编码获取建筑物的坐标_Java_Android_Google Maps_Geocoding_Openstreetmap - Fatal编程技术网

Java 使用地理编码获取建筑物的坐标

Java 使用地理编码获取建筑物的坐标,java,android,google-maps,geocoding,openstreetmap,Java,Android,Google Maps,Geocoding,Openstreetmap,我想用地理编码得到建筑物的坐标。目前,我使用android的GeoCoder类从所选地址获取坐标,但这些坐标并不对应于建筑物的边缘。OSM包含每个建筑的这些信息,但我不知道如何使用GeoCoder类获取这些信息。有没有可能在android的geocoder类中使用OSM来获取这些信息?这可能有点复杂。首先,OSM并不是每个地址都有一座大楼。有时一座建筑物包含几个地址,或者一个地址可以属于几个建筑物 但作为第一步,您可以使用地理编码来获取特定地址的坐标。然后将这些坐标传递到立交桥API并搜索附近的

我想用地理编码得到建筑物的坐标。目前,我使用android的GeoCoder类从所选地址获取坐标,但这些坐标并不对应于建筑物的边缘。OSM包含每个建筑的这些信息,但我不知道如何使用GeoCoder类获取这些信息。有没有可能在android的geocoder类中使用OSM来获取这些信息?

这可能有点复杂。首先,OSM并不是每个地址都有一座大楼。有时一座建筑物包含几个地址,或者一个地址可以属于几个建筑物

但作为第一步,您可以使用地理编码来获取特定地址的坐标。然后将这些坐标传递到立交桥API并搜索附近的建筑物

例如:

我们正在寻找德累斯顿弗兰兹韦格4号楼的地址。Nagnitm查询可以如下所示(假设我们需要JSON输出):

它返回一个完全匹配的地址,因为该地址存在于OSM的数据库中。通过查看地址详细信息,您可以看到*房屋号*和道路匹配。我们甚至得到了一个对应的标签,其中包含了建筑物轮廓的坐标(参见)

但正如前面所述,并不是每个地址都属于一座建筑物。例如,当Huttenstraße 14在德累斯顿时,我们也会得到一个精确的结果,但返回的路径属于一个区域。该区域包含一栋建筑物,因此属于该地址。Nagnitm还返回一个边界框,在本例中为51.0508041381836,51.0514030456543,13.7778491973877,13.7796478271484。我们可以用它来检索该区域内的对象。如果您没有OSM数据库的本地副本,则可以使用以下查询:

<osm-script output="json">
  <query type="way">
    <has-kv k="building"/>
    <bbox-query e="13.7796478271484" n="51.0514030456543" s="51.0508041381836" w="13.7778491973877"/>
  </query>
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton"/>
</osm-script>

此查询将使用给定边界框中的建筑物标记进行全方位查询。您可以使用来可视化结果。如您所见,边界框包含多个建筑,但其中只有一个位于区域内。所以你必须检查每栋建筑的坐标,看哪一栋适合你。请记住,一个地址可能属于多个建筑物,因此可以有多个匹配项

还有第三种情况,地址是单个。例如,的结果返回。此处节点实际上是建筑方式的一个成员,因此很容易确定相应的建筑。但情况并非总是如此,您可能需要运行另一个立交桥API查询来确定附近的建筑,并再次查看哪一个最适合