У меня есть MySQL 8 пространственная база данных с около 450 записями. К сожалению, я не могу использовать PostGre / PostGIS в своем веб-пространстве, с чем я более знаком. Для локального тестирования я использую Xampp с php для загрузки данных в карту листовки.
Я получил сообщение об ошибке:
Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан (попытка выделить 135168 байт) в C: \ xampp \ htdocs \ xgis \ php \ test3. php в строке 21
Это указывает на 'geometry' => json_decode($row['geo'])
Общая длина данных всех 450 записей составляет около 11 МБ
Самый большой запись имеет 85 000 символов как json (в основном запись SHAPE). Если я уменьшу прецессию с ST_AsGeo JSON (SHAPE, 5) до 4, я получу 78.500 символов. Если я сохраню его в notepadd, это будет около 80 КБ
Если я использую локальный: ini_set('memory_limit', '1024M');
Я получил ожидаемый результат. Но я не хочу использовать это онлайн. Поэтому я попытался буферизовать результат с помощью MYSQLI_USE_RESULT
, но получил сообщение об ошибке. Я прочитал несколько сообщений и php do c о проблеме, но я не нашел решения.
<?php
//ini_set('memory_limit', '1024M');
// mysqli_set_charset($conn,'utf8');
$sql = "SELECT *, ST_AsGeoJSON(SHAPE,5) as geo FROM gem_grenzen;";
$geojson = array(
'type' => 'FeatureCollection',
'features' => array()
);
$result = $conn->query($sql, MYSQLI_USE_RESULT);
while($row = $result->fetch_assoc()) {
$properties = $row;
unset($properties['geo']);
unset($properties['SHAPE']);
$feature = array(
'type' => 'Feature',
'geometry' => json_decode($row['geo']),
'properties' => $properties
);
array_push($geojson['features'], $feature);
}
echo 'var $foo =';
echo json_encode($geojson, JSON_NUMERIC_CHECK);
echo "; \r\n";
echo 'L.geoJSON($foo,{style:style_gem}).addTo(map);';
?>