【问题标题】:Php - echo a MySQL result as geojsonPhp - 将 MySQL 结果回显为 geojson
【发布时间】:2018-05-04 17:40:53
【问题描述】:

我在 MySQL 数据库中有一个表,它有一个几何字段(多边形)

现在我可以查询几何字段并获得这样的geojson:

SELECT ST_AsGeoJSON(b.shape) FROM `tbl_polygon` as b where ST_Intersects(b.shape, ST_GeomFromText('Polygon((28.0921 -26.11351,28.09210 -26.11288,28.0929502 -26.1128831,28.092950 -26.113510,28.0921027 -26.113510))',1))

在 MySQL 中,我得到一个 geojson:

{"type": "Polygon", "coordinates": [[[28.092521118...

现在我遇到了困难,我有一张 Leafletjs 地图,想将此 geojson 显示为图层。

那么我怎样才能从外部 php 文件中回显 geojson,以便我可以将 geojson 放入我的 javascript 并使用 Leaflet 的 L.geoJSON 添加图层。

我不确定这是否会以这种方式工作。 任何建议都会很棒。 谢谢,

基于 Majid Abbasi 的出色回答(谢谢)。我试过了,但很明显我错过了一些东西,我只是得到一个没有错误的空白页。谢谢马吉德。 这是我的 index.php 文件中的代码:

Index.php

<?php
require_once(conn.php);
$myquery = "SELECT ST_AsGeoJSON(b.shape) FROM `tbl_polygon` as b where ST_Intersects(b.shape, ST_GeomFromText('Polygon((28.092102706432343 -26.113510096462498,28.092102706432343 -26.11288390575381,28.092950284481045 -26.11288390575381,28.092950284481045 -26.113510096462498,28.092102706432343 -26.113510096462498))',1))";

$result = mysqli_query($connect, $myquery);?>

&lt;div id="mapid" style="width: 600px; height: 400px;"&gt;&lt;/div&gt;

var mymap = L.map('mapid').setView([28.092102706432343, -26.113510096462498], 13); 

L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
    maxZoom: 18,
    attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
        '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
        'Imagery © <a href="http://mapbox.com">Mapbox</a>',
    id: 'mapbox.streets'
}).addTo(mymap);  

var data = <?php echo $result; ?>
 ployLayer = L.geoJson(data).addTo(map);

【问题讨论】:

    标签: javascript php mysql leaflet geojson


    【解决方案1】:

    你需要像这样在你的 PHP 文件中定义一个 JavaScript 变量,然后调用 initializeMap 函数来创建你的地图并将数据传递给它:

    <?php
    require_once(conn.php);
    $myquery = "SELECT ST_AsGeoJSON(b.shape) as jsonData FROM `tbl_polygon` as b where ST_Intersects(b.shape, ST_GeomFromText('Polygon((28.092102706432343 -26.113510096462498,28.092102706432343 -26.11288390575381,28.092950284481045 -26.11288390575381,28.092950284481045 -26.113510096462498,28.092102706432343 -26.113510096462498))',1))";
    
    $result = mysqli_query($connect, $myquery);
    $data = mysqli_fetch_fields(result);
    $ST_AsGeoJSON = $data->jsonData;
    ?>
    <script language="javascript">
        var data = <?php echo $ST_AsGeoJSON; ?>;
    </script>
    var mymap = L.map('mapid').setView([28.092102706432343, -26.113510096462498], 13); 
    
    L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
    maxZoom: 18,
    attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
        '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
        'Imagery © <a href="http://mapbox.com">Mapbox</a>',
    id: 'mapbox.streets'
    }).addTo(mymap); 
    ployLayer = L.geoJson(data).addTo(map);
    

    请注意,您应该在此脚本之前运行查询并获取数据并将其放在 $ST_AsGeoJSON 上。

    并且应该在您的 javascript 中具有创建地图的 initializeMap 方法。

    【讨论】:

    • 感谢 Majid,这可能对我有用。我试图实现它,但我遇到了一些问题,如果你有时间可以看看我对我的问题所做的编辑。再次感谢
    • 谢谢,这太棒了。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2018-08-17
    相关资源
    最近更新 更多