У меня в руках есть относительно большой проект (по крайней мере, для меня), который требует получить сотни слоев из базы данных 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);
?>
Любая помощь приветствуется!