<?php # geoPHP geojson include_once('geoPHP/geoPHP.inc'); function wkt_to_json($wkt) { $geom = geoPHP::load($wkt,'wkt'); return $geom->out('json'); } $layer = $_GET['layer']; # $conn = new SQLite3('myDB.sqlite'); # $conn->loadExtension('libspatialite.so'); # SQL , switch ($layer) { case 'point': $sql = 'SELECT PK_UID, ST_asText(Geometry) AS wkt FROM '.$layer.''; break; case 'line': $sql = 'SELECT PK_UID, ST_asText(Geometry) AS wkt FROM '.$layer.''; break; } # $rs = $conn->query($sql); if (!$rs) { echo 'An SQL error occured.\n'; exit; } # GeoJson $geojson = array( 'type' => 'FeatureCollection', 'features' => array() ); while ($row = $rs->fetchArray(SQLITE3_ASSOC)) { $properties = $row; # unset($properties['wkt']); unset($properties['GEOMETRY']); $feature = array( 'type' => 'Feature', 'geometry' => json_decode(wkt_to_json($row['wkt'])), 'properties' => $properties ); # array_push($geojson['features'], $feature); } header('Content-type: application/json; charset=utf8'); echo json_encode($geojson, JSON_UNESCAPED_UNICODE); $conn = NULL; ?>
[sqlite3] sqlite3.extension_dir = /usr/lib/ enable_dl=on;
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> </title> <link rel="stylesheet" href="css/leaflet.css" /> <link rel="stylesheet" href="css/MarkerCluster.css" /> <link rel="stylesheet" href="css/MarkerCluster.Default.css" /> <!--[if lte IE 8]> <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.5/leaflet.ie.css" /> <![endif]--> <!-- Custom styles for this template --> <style> html, body, #map { height: 100%; width: 100%; } </style> </head> <body> <div id="map"></div> <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="js/leaflet.js"></script> <script type="text/javascript" src="js/leaflet.markercluster-src.js"></script> <script type="text/javascript"> var map; var minimal = L.tileLayer('http://b.tiles.maps.sputnik.ru/{z}/{x}/{y}.png', { attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors', minZoom: 0, maxZoom: 18}); // Overlay Layers var line = L.geoJson(null, { style: function( feature ) { var style = {}; style.color = "#1110d6"; style.weight = 4; style.opacity = 0.9; return style; }, onEachFeature: function( feature, line ) { var id_line = feature.properties.PK_UID; line.bindPopup('<a class="link" href="line/'+id_line+'.png"" target="_blank"></a>'); } }); $.getJSON("layer.php?layer=line", function (data) { line.addData(data); }); var points = new L.MarkerClusterGroup({ spiderfyOnMaxZoom: false, showCoverageOnHover: false,disableClusteringAtZoom: 15}); var point = L.geoJson(null, { onEachFeature: function( feature, point ) { var aa = feature.geometry.coordinates; var id = feature.properties.PK_UID; var sw = new L.Marker( new L.LatLng(aa[1], aa[0])); sw.bindPopup('<a class="link" target="_blank">'+id+'</a>'); points.addLayer(sw); } }); $.getJSON("layer.php?layer=point", function (data) { point.addData(data); }); map = L.map("map", {layers: [minimal,line,points]}); map.setView([57.545995,29.930411], 6); var baseLayers = { "OSM": minimal }; var overlays = { " ": line, "": points }; var scaleControl = L.control.scale(); var layerControl = L.control.layers(baseLayers, overlays).addTo(map); </script> </body> </html>
Source: https://habr.com/ru/post/251459/
All Articles