Получите пространственные данные из PostGIS по запросу в Leaflet - PullRequest
0 голосов
/ 17 марта 2020

У меня в руках есть относительно большой проект (по крайней мере, для меня), который требует получить сотни слоев из базы данных PostGIS. Мое решение - использовать PHP для извлечения данных, а затем использовать функцию L.geoJSON в Leaflet для загрузки данных на карту.
Я не могу использовать Geoserver, у меня его нет вид доступа к серверу, и я не могу просить об установке. Это быстро решило бы мою проблему, но сейчас это вне таблицы.

Моя проблема в том, что я разработал систему для загрузки всех слоев при открытии веб-сайта. И это совершенно ненужно и перегружает страницу ненужными данными. Я не могу понять, как загружать нужные мне слои только тогда, когда они мне нужны.
Цель состояла в том, чтобы получать данные только при активации слоя в элементе управления слоями.
Кроме того, из-за этой системы Мне нужен файл PHP для каждого слоя ... Это тоже действительно неэффективно.

Этот код был склеен из разных уроков. Он отлично работал для загрузки нескольких слоев, но не очень хорошо масштабируется для загрузки сотен слоев.

Вот код для загрузки одного слоя:

JAVASCRIPT (слой добавляется только при нажатии на элемент управления слоем в Leaflet)

const limitStyle = {
    color: '#000',
    fillOpacity: 0,
};

const limitRomano = L.geoJSON(null, {
    style: limitStyle,
});
$.post('php/herdade_romano/limite.php', function(response) {
    const geojson = JSON.parse(JSON.parse(response));
    limitRomano.addData(geojson);
});

PHP

<?php

// error_reporting(0);
// ini_set('display_errors', '1');
// ini_set('error_reporting', E_ALL);

$config = include('../config.php'); /* This file contains the database credentials */

$server = $config['server'];
$username = $config['username'];
$password = $config['password'];
$database = $config['database'];
$port = $config['port'];

$dbconn = pg_connect(
    "host=$server
    dbname=$database
    user=$username
    password=$password
    port=$port"
) or die('connection error');


$query = "SELECT row_to_json(fc)
FROM (
    SELECT 'FeatureCollection' As type, array_to_json(array_agg(f)) As features
    FROM (SELECT 'Feature' As type,
    ST_AsGeoJSON(tb.geom, 4)::json As geometry
    FROM herdade_romano.limite As tb ) As f 
) As fc;";

$result = pg_query($query) or die('Query error');

while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
    foreach ($line as $col_value) {
        echo json_encode($col_value);
    }
}

pg_close($dbconn);
?>


Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...