Получение JSON из запроса Ajax и создание слоя многоугольника в Leaflet - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужна помощь со скриптом, у меня есть запрос ajax, который возвращает GeoJSON

Изображения:

  1. PHP to Ajax
  2. TEST GeoJSON
  3. GeoJSON

Формат JSON

  • "id_map": "2",
  • "description": "AC1",
  • "geojson": {координата GeoJSON}
  • "file": "AC1.geojson"

Я могу использовать AJAX JSON Leaflet (плагин (для созданияслой многоугольника с использованием файла значений JSON ex (ac1.geojson) и укажите его в папке с файлами GeoJSON (например, geojson), но у меня есть тот же GeoJSON, сохраненный как текстовая переменная в базе данных, и я хочу использоватьэто помимо файла из-за риска потери файлов, поэтому я восстанавливаю его (я использую GeoJson.io для проверки геоджона и копирования, вставки его в столбец в моей базе данных), используя соединение с базой данных, а затем я JSON кодирую его, ноЯ не могу его использовать. И у меня проблемы с форматом, который выходит из PHP.

$(document).ready(function() {
  document.body.onload = function() {

    var tiles = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        maxZoom: 20,
        minZoom: 13,
        attribution: 'x'
      }),
      latlng = L.latLng(-32.0312422, -52.0917713);

    var mymap = L.map('mapid', {
      center: latlng,
      zoom: 18,
      layers: [tiles]
    });
    L.marker([-32.0312422, -52.0917713]).addTo(mymap);

    function popUp(f, l) {
      var out = [];
      if (f.properties) {
        for (key in f.properties) {
          out.push(key + ": " + f.properties[key]);
        }
        l.bindPopup(out.join("<br />"));
      }
    }

    var j_url = "somephp.php";

    var results = $.ajax({
      url: j_url,
      dataType: 'json',
      cache: false,
      success: AjaxSucceeded,
      error: AjaxFailed
    });

    function AjaxSucceeded(results) {
      console.log("Data successfully loaded.");
      alert("OK");

      $.each(results, function(index, value) {
        var geojsonTESTE = {
          "type": "FeatureCollection",
          "features": [{
            "type": "Feature",
            "properties": {},
            "geometry": {
              "type": "Polygon",
              "coordinates": [
                [
                  [-52.101760, -32.031909],
                  [-52.102275, -32.028598],
                  [-52.100794, -32.028435],
                  [-52.099206, -32.029053],
                  [-52.097554, -32.029362],
                  [-52.097511, -32.029672],
                  [-52.096760, -32.029672],
                  [-52.096696, -32.029544],
                  [-52.095795, -32.029617],
                  [-52.094142, -32.029835],
                  [-52.088585, -32.030672],
                  [-52.088392, -32.030763],
                  [-52.088027, -32.034656],
                  [-52.101631, -32.032145],
                  [-52.101760, -32.031909]
                ]
              ]
            }
          }]
        };

        var geoObject = JSON.parse(value.geojson);

        L.geoJSON(geojsonTESTE).addTo(mymap);
        L.geoJSON(features).addTo(mymap);

        //With Leaflet Ajax e Files
        //j_url = "json/"+value.file;                            
        //var jsonTest = new L.GeoJSON.AJAX([j_url]{onEachFeature:popUp}).addTo(mymap);            
      });
    }

    function AjaxFailed(results) {
      console.log("ERROR AJAX");
      alert("ERRO");
    }

    $.when(results).done(function() {

    });

  };
});
<?php
header('Content-Type: application/json');

$connStr = { database connection string }
$conn   = pg_connect($connStr);
$result = pg_query($conn, "select * from mapas");

$qtd = pg_num_rows($result); 

$res = "[";

if($qtd > 0){   
   $i = 0;
   foreach(pg_fetch_all($result) as $row)
    {       
        $x = $row['geojson'];
        $patterns = array ('/[^A-Za-z0-9\-\,\"\:\{\}\[\]]/');
        $replace = array ('');
        $desc = preg_replace($patterns, $replace,$x);         
        $desc = str_replace('\"', '"', $desc, $count);
        
        $data['id_map']       = $row['id_map'];
        $data['description']  = $row['description'];
        $data['geojson']      = $desc;
        $data['file']         = $row['file'];
       
        $map = json_readable_encode($data,null,true); 
               
        $res .= $map;
        
        if($i < $qtd -1 ){
        $res .= ",";
        }
        $i++;
    }
}  
$res .= "]";

echo trim($res);

pg_free_result($result);
pg_close();
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...