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 脱敏项目合作,ner需求合作
  • ¥15 脱敏项目合作,ner需求合作
  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密