duanjing7651 2017-11-03 06:39 采纳率: 0%
浏览 134
已采纳

在PHP中覆盖API和json输出

I am using Overpass Turbo to show information on a map. Part of my code (I use PHP) is as follows:

//overpass query
$overpass = 'http://overpass-api.de/api/interpreter?data=[out:json];area(3600046663)->.searchArea;(node["amenity"="drinking_water"](area.searchArea););out;';
// collecting results in JSON format
$html = file_get_contents($overpass);
$jsonout = json_decode($html);
// this line just checks what the query would give as output
var_dump($jsonout);

Query results in JSON format (which is what var_dump shows) look like this:

version:    0.6
generator:  "Overpass API"
osm3s:
timestamp_osm_base: "2017-11-03T06:25:02Z"
timestamp_areas_base:   "2017-11-03T05:45:02Z"
copyright:  "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
elements:   
0:
type:   "node"
id: 254917402
lat:    46.0672187
lon:    11.1379545
tags:   
amenity:    "drinking_water"
1:
type:   "node"
id: 257481472
lat:    46.0687113
lon:    11.1201097
tags:   
amenity:    "drinking_water"

and so on.

You can see it yourself, copying/pasting the query URL in your browser: http://overpass-api.de/api/interpreter?data=[out:json];area(3600046663)-%3E.searchArea;(node[%22amenity%22=%22drinking_water%22](area.searchArea););out;

As you can see, each element in the array above has latitude and longitude information. I need those to show markers on a map.

I am not able to isolate the lat and lon information from each element in the array. How can I do that?

  • 写回答

1条回答 默认 最新

  • douzhang1299 2017-11-03 06:49
    关注

    Here you go:

    <?php
    
    // overpass query
    $overpass = 'http://overpass-api.de/api/interpreter?data=[out:json];area(3600046663)->.searchArea;(node["amenity"="drinking_water"](area.searchArea););out;';
    
    // collecting results in JSON format
    $html = file_get_contents($overpass);
    $result = json_decode($html, true); // "true" to get PHP array instead of an object
    
    // elements key contains the array of all required elements
    $data = $result['elements'];
    
    foreach($data as $key => $row) {
    
        // latitude
        $lat = $row['lat'];
    
        // longitude
        $lng = $row['lon'];
    }
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB yalmip gurobi求解器
  • ¥15 关于#stm32#的问题:第一张图是发送数据代码,第二第三张图是接收数据并进行DAC转换的函数,若用串口一接收数据并进行DAC转换,主函数代码该怎么写
  • ¥20 hc130怎么读写内部flash存储信息
  • ¥15 Axure rp9注册与登录交互
  • ¥15 我下载图形界面重启完就变成这样了,打字也打不了,动也动不了,该怎么解决(操作系统-centos)
  • ¥15 VBA中在窗体中遍历所有checkbox控件,提取出被选中的checkbox的caption值
  • ¥15 在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?
  • ¥15 ansys license许可证问题
  • ¥20 QQ号和密码都能正常登录微信 QQ号和密码登录微信显示密码错误
  • ¥15 单片机RTOS Kernel与应用分离开发,Kernel如何调起应用?