From 0d054525e972c8d5b8d9e36da58a16df6d5c1746 Mon Sep 17 00:00:00 2001 From: tutingjun Date: Mon, 15 Apr 2024 23:34:45 -0500 Subject: [PATCH 01/11] Add all map support --- controllers/IndexController.php | 68 +++++++++++++----------- views/public/javascripts/walking-tour.js | 57 +++++++++++++++++--- 2 files changed, 86 insertions(+), 39 deletions(-) diff --git a/controllers/IndexController.php b/controllers/IndexController.php index 31ae393..21c6606 100755 --- a/controllers/IndexController.php +++ b/controllers/IndexController.php @@ -29,13 +29,13 @@ public function publicTours() $results = $tour_table->fetchObjects($select); // Build an array with $_tourTypes = array('id' => array(), 'color' => array()); - foreach ($results as $tour){ - if($tour['public']==1 || current_user()->role == "super"){ - $_tourTypes['id'][$tour['id']] = $tour['title']; - $_tourTypes['color'][$tour['id']] = $tour['color']; - $_tourTypes['description'][$tour['id']] = $tour['description']; - $_tourTypes['credits'][$tour['id']] = $tour['credits']; - } + foreach ($results as $tour) { + if ($tour['public'] == 1 || current_user()->role == "super") { + $_tourTypes['id'][$tour['id']] = $tour['title']; + $_tourTypes['color'][$tour['id']] = $tour['color']; + $_tourTypes['description'][$tour['id']] = $tour['description']; + $_tourTypes['credits'][$tour['id']] = $tour['credits']; + } } return $_tourTypes; @@ -66,7 +66,7 @@ public function indexAction() ->appendStylesheet(src('walking-tour', 'css', 'css')); } - public function mapConfigAction() + public function mapConfigAction() { // Process only AJAX requests. if (!$this->_request->isXmlHttpRequest()) { @@ -86,8 +86,8 @@ public function mapConfigAction() } /* - * Beginning to separate tours into separate features - */ + * Beginning to separate tours into separate features + */ public function queryAction() { // Process only AJAX requests. @@ -98,29 +98,29 @@ public function queryAction() $db = $this->_helper->db->getDb(); $joins = array("$db->Item AS items ON items.id = locations.item_id"); $wheres = array("items.public = 1"); - $prefix=$db->prefix; + $prefix = $db->prefix; // Filter public tours' items $request_tour_id = $this->publicTours(); $colorArray = array(); - $tourItemTable = $db->getTable( 'TourItem' ); + $tourItemTable = $db->getTable('TourItem'); $tourItemsIDs = array(); $returnArray = array(); - foreach($request_tour_id['id'] as $tour_id => $tour_title){ - if($tour_id != 0){ - $tourItemsDat = $tourItemTable->fetchObjects( "SELECT item_id FROM ".$prefix."tour_items + foreach ($request_tour_id['id'] as $tour_id => $tour_title) { + if ($tour_id != 0) { + $tourItemsDat = $tourItemTable->fetchObjects("SELECT item_id FROM " . $prefix . "tour_items WHERE tour_id = $tour_id"); } else { - $tourItemsDat = $tourItemTable->fetchObjects( "SELECT item_id FROM ".$prefix."tour_items"); + $tourItemsDat = $tourItemTable->fetchObjects("SELECT item_id FROM " . $prefix . "tour_items"); } $tourItemsIDs[$tour_id] = array(); - foreach ($tourItemsDat as $dat){ + foreach ($tourItemsDat as $dat) { array_push($tourItemsIDs[$tour_id], (int) $dat["item_id"]); } } - foreach($tourItemsIDs as $tour_id => $item_array){ + foreach ($tourItemsIDs as $tour_id => $item_array) { $tourItemsID = implode(", ", $item_array); $wheres = array("items.public = 1"); @@ -143,7 +143,7 @@ public function queryAction() for ($i = 0; $i < count($item_array); $i++) { for ($j = 0; $j < count($dbItems); $j++) { if ($item_array[$i] == $dbItems[$j]['id']) { - array_push( $orderedItems, $dbItems[$j] ); + array_push($orderedItems, $dbItems[$j]); } } } @@ -158,7 +158,7 @@ public function queryAction() ), 'properties' => array( 'id' => $row['id'], - "marker-color"=> $request_tour_id['color'][$tour_id] + "marker-color" => $request_tour_id['color'][$tour_id] ), ); } @@ -168,7 +168,7 @@ public function queryAction() $returnArray[$tour_id]["Credits"] = $request_tour_id['credits'][$tour_id]; } $this->_helper->json($returnArray); - + } /** @@ -184,12 +184,12 @@ public function getItemAction() $tour_id = $this->_request->getParam('tour'); $db = $this->_helper->db->getDb(); - $tourItemTable = $db->getTable( 'TourItem' ); - $prefix=$db->prefix; + $tourItemTable = $db->getTable('TourItem'); + $prefix = $db->prefix; - $tourItem = $tourItemTable->fetchObjects( "SELECT * FROM ".$prefix."tour_items - WHERE tour_id = $tour_id AND item_id = $item_id" ); + $tourItem = $tourItemTable->fetchObjects("SELECT * FROM " . $prefix . "tour_items + WHERE tour_id = $tour_id AND item_id = $item_id"); $exhibit_id = $tourItem[0]["exhibit_id"]; @@ -202,19 +202,23 @@ public function getItemAction() 'date' => metadata($item, array('Dublin Core', 'Date'), array('all' => true)), 'thumbnail' => item_image('square_thumbnail', array(), 0, $item), 'fullsize' => item_image('fullsize', array('style' => 'max-width: 100%; height: auto;'), 0, $item), - 'url' => url(array('module' => 'default', - 'controller' => 'items', - 'action' => 'show', - 'id' => $item['id']), - 'id'), + 'url' => url( + array( + 'module' => 'default', + 'controller' => 'items', + 'action' => 'show', + 'id' => $item['id'] + ), + 'id' + ), "exhibitUrl" => "" ); if (plugin_is_active('DublinCoreExtended')) { $data['abstract'] = metadata($item, array('Dublin Core', 'Abstract'), array('no-escape' => true)); } - if (plugin_is_active('ExhibitBuilder')){ + if (plugin_is_active('ExhibitBuilder')) { $exhibit = get_records('Exhibit', array('id' => $exhibit_id)); - if ($exhibit && count($exhibit) == 1){ + if ($exhibit && count($exhibit) == 1) { $data["exhibitUrl"] = exhibit_builder_exhibit_uri($exhibit[0]); } } diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index 9a86138..f01a8c2 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -1,8 +1,21 @@ -$(document).ready(function () { - walkingTourJs() -}); +const allmapsAnnotation = import("https://unpkg.com/@allmaps/annotation?module") +const allmapsTransform = import("https://unpkg.com/@allmaps/transform?module") + +Promise.all([allmapsAnnotation, allmapsTransform ]) + .then(([allmapsAnnotation, allmapsTransform]) => { + // Both modules loaded successfully + // Use the imported modules + $(document).ready(function () { + walkingTourJs(allmapsAnnotation, allmapsTransform) + }); + }) + .catch((error) => { + // An error occurred while loading one of the modules + console.error('Error loading modules:', error); + }); + -function walkingTourJs() { +function walkingTourJs(allmapsAnnotation, allmapsTransform) { var imported = document.createElement("script"); document.head.appendChild(imported); // Set map height to be window height minus header height. @@ -10,6 +23,7 @@ function walkingTourJs() { $('#map').css('height', windowheight - 54); var MAP_URL_TEMPLATE = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}'; + const annotationUrl = 'https://annotations.allmaps.org/manifests/47574ee029cca631' var MAP_CENTER; var MAP_ZOOM; // MAP_ZOOM controls the default zoom of the map @@ -22,6 +36,7 @@ function walkingTourJs() { var historicMapLayer; var markers; var jqXhr; + var transformer; var locationMarker; var markerData; var allItems = {}; @@ -242,6 +257,24 @@ function walkingTourJs() { window.onload = function () { jqXhr = $.post('walking-tour/index/map-config', function (response) { mapSetUp(response); + fetch(annotationUrl) + .then(response => { + // Check if the request was successful + if (!response.ok) { + throw new Error('Network response was not ok'); + } + // Parse the response as JSON + return response.json(); + }) + .then(data => { + const maps = allmapsAnnotation.parseAnnotation(data) + transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); + }) + .catch(error => { + // Handle any errors that occurred during the fetch + console.error('Fetch error:', error); + }); + doQuery(); }) }; @@ -292,9 +325,8 @@ function walkingTourJs() { map.addControl(new extentControl()); map.attributionControl.setPrefix('Tiles © Esri'); - // const annotationUrl = 'https://annotations.allmaps.org/manifests/47574ee029cca631' - // const warpedMapLayer = new Allmaps.WarpedMapLayer(annotationUrl) - // map.addLayer(warpedMapLayer); + const warpedMapLayer = new Allmaps.WarpedMapLayer(annotationUrl) + map.addLayer(warpedMapLayer); map.on('zoomend', function () { if (map.getZoom() == MAP_MIN_ZOOM) { @@ -396,10 +428,21 @@ function walkingTourJs() { var numMarker = 1; var response = value["Data"]; var itemIDList = []; + console.log(transformer) + console.log(response.features) response.features.forEach(ele => { + const test = transformer.transformForwardAsGeojson( + ele.geometry + ) + console.log(test) itemIDList.push(ele.properties.id) + return { + ...ele, + geometry: test + } }) + console.log(response.features) tourToItem[tourId] = itemIDList; markerList = [] var geoJsonLayer = L.geoJson(response.features, { From ab120ef1bb449dc866012ba54518d7b0ebb7017d Mon Sep 17 00:00:00 2001 From: tutingjun Date: Tue, 16 Apr 2024 12:32:35 -0500 Subject: [PATCH 02/11] Update transform param --- views/public/javascripts/walking-tour.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index f01a8c2..bf95e61 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -36,7 +36,6 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { var historicMapLayer; var markers; var jqXhr; - var transformer; var locationMarker; var markerData; var allItems = {}; @@ -268,14 +267,13 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { }) .then(data => { const maps = allmapsAnnotation.parseAnnotation(data) - transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); + const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); + doQuery(transformer); }) .catch(error => { // Handle any errors that occurred during the fetch console.error('Fetch error:', error); }); - - doQuery(); }) }; @@ -376,7 +374,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { * * Call only once during set up */ - function doQuery() { + function doQuery(transformer) { const markerFontHtmlStyles = ` transform: rotate(-45deg); color:white; @@ -431,10 +429,10 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { console.log(transformer) console.log(response.features) - response.features.forEach(ele => { - const test = transformer.transformForwardAsGeojson( + response.features.map(ele => { + const test = transformer.transformBackward( ele.geometry - ) + ) console.log(test) itemIDList.push(ele.properties.id) return { From a5ab1fecbcba19e403a79082ee0180ef1160d65b Mon Sep 17 00:00:00 2001 From: tutingjun Date: Sun, 28 Apr 2024 20:36:57 -0500 Subject: [PATCH 03/11] display iiif --- README.md | 6 + controllers/IndexController.php | 1 + views/public/javascripts/leaflet-iiif.js | 241 ++++++++++ views/public/javascripts/walking-tour.js | 547 +++++++++++++++++------ 4 files changed, 666 insertions(+), 129 deletions(-) create mode 100644 views/public/javascripts/leaflet-iiif.js diff --git a/README.md b/README.md index 0186a33..943f5f2 100755 --- a/README.md +++ b/README.md @@ -69,3 +69,9 @@ One annoying issue we found is that there is some coupling between the MallMap t - [x] Representation for no exhibit for tour item - [ ] Padding on the dropdown menu - [ ] Historical Map + +### Allmaps References + +Leaflet without geographic coordinates: https://leafletjs.com/examples/crs-simple/crs-simple.html +https://observablehq.com/d/7db1214479eeeee0 +https://observablehq.com/@allmaps/using-allmaps-to-draw-geojson-on-a-iiif-image diff --git a/controllers/IndexController.php b/controllers/IndexController.php index 61dc0b9..9a68ba6 100755 --- a/controllers/IndexController.php +++ b/controllers/IndexController.php @@ -58,6 +58,7 @@ public function indexAction() ->appendFile(src('modernizr.custom.63332', 'javascripts', 'js')) ->appendFile(src('Polyline.encoded', 'javascripts', 'js')) ->appendFile('//cdn.jsdelivr.net/npm/@allmaps/leaflet/dist/bundled/allmaps-leaflet-1.9.umd.js') + ->appendFile(src('leaflet-iiif', 'javascripts', 'js')) ->appendFile(src('walking-tour', 'javascripts', 'js')); $this->view->headLink() ->appendStylesheet('//code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css', 'all') diff --git a/views/public/javascripts/leaflet-iiif.js b/views/public/javascripts/leaflet-iiif.js new file mode 100644 index 0000000..ee5ae09 --- /dev/null +++ b/views/public/javascripts/leaflet-iiif.js @@ -0,0 +1,241 @@ +/* + * Leaflet-IIIF 1.1.1 + * IIIF Viewer for Leaflet + * by Jack Reed, @mejackreed + */ + +L.TileLayer.Iiif = L.TileLayer.extend({ + options: { + continuousWorld: true, + tileSize: 256, + updateWhenIdle: true, + tileFormat: 'jpg', + fitBounds: true + }, + + initialize: function(url, options) { + options = typeof options !== 'undefined' ? options : {}; + + if (options.maxZoom) { + this._customMaxZoom = true; + } + + // Check for explicit tileSize set + if (options.tileSize) { + this._explicitTileSize = true; + } + + // Check for an explicit quality + if (options.quality) { + this._explicitQuality = true; + } + + options = L.setOptions(this, options); + this._infoDeferred = new $.Deferred(); + this._infoUrl = url; + this._baseUrl = this._templateUrl(); + this._getInfo(); + }, + getTileUrl: function(coords) { + var _this = this, + x = coords.x, + y = (coords.y), + zoom = _this._getZoomForUrl(), + scale = Math.pow(2, _this.maxNativeZoom - zoom), + tileBaseSize = _this.options.tileSize * scale, + minx = (x * tileBaseSize), + miny = (y * tileBaseSize), + maxx = Math.min(minx + tileBaseSize, _this.x), + maxy = Math.min(miny + tileBaseSize, _this.y); + + var xDiff = (maxx - minx); + var yDiff = (maxy - miny); + + return L.Util.template(this._baseUrl, L.extend({ + format: _this.options.tileFormat, + quality: _this.quality, + region: [minx, miny, xDiff, yDiff].join(','), + rotation: 0, + size: Math.ceil(xDiff / scale) + ',' + }, this.options)); + }, + onAdd: function(map) { + var _this = this; + + // Wait for deferred to complete + $.when(_this._infoDeferred).done(function() { + + // Set maxZoom for map + map._layersMaxZoom = _this.maxZoom; + + // Call add TileLayer + L.TileLayer.prototype.onAdd.call(_this, map); + + if (_this.options.fitBounds) { + _this._fitBounds(); + } + + // Reset tile sizes to handle non 256x256 IIIF tiles + _this.on('tileload', function(tile, url) { + + var height = tile.tile.naturalHeight, + width = tile.tile.naturalWidth; + + // No need to resize if tile is 256 x 256 + if (height === 256 && width === 256) return; + + tile.tile.style.width = width + 'px'; + tile.tile.style.height = height + 'px'; + + }); + }); + }, + _fitBounds: function() { + var _this = this; + + // Find best zoom level and center map + var initialZoom = _this._getInitialZoom(_this._map.getSize()); + var imageSize = _this._imageSizes[initialZoom]; + var sw = _this._map.options.crs.pointToLatLng(L.point(0, imageSize.y), initialZoom); + var ne = _this._map.options.crs.pointToLatLng(L.point(imageSize.x, 0), initialZoom); + var bounds = L.latLngBounds(sw, ne); + + _this._map.fitBounds(bounds, true); + }, + _getInfo: function() { + var _this = this; + + // Look for a way to do this without jQuery + $.getJSON(_this._infoUrl) + .done(function(data) { + _this.y = data.height; + _this.x = data.width; + + var tierSizes = [], + imageSizes = [], + scale, + width_, + height_, + tilesX_, + tilesY_; + + // Set quality based off of IIIF version + if (data.profile instanceof Array) { + _this.profile = data.profile[0]; + }else { + _this.profile = data.profile; + } + + _this._setQuality(); + + // Unless an explicit tileSize is set, use a preferred tileSize + if (!_this._explicitTileSize) { + // Set the default first + _this.options.tileSize = 256; + if (data.tiles) { + // Image API 2.0 Case + _this.options.tileSize = data.tiles[0].width; + } else if (data.tile_width){ + // Image API 1.1 Case + _this.options.tileSize = data.tile_width; + } + } + + function ceilLog2(x) { + return Math.ceil(Math.log(x) / Math.LN2); + }; + + // Calculates maximum native zoom for the layer + _this.maxNativeZoom = Math.max(ceilLog2(_this.x / _this.options.tileSize), + ceilLog2(_this.y / _this.options.tileSize)); + + // Enable zooming further than native if maxZoom option supplied + if (_this._customMaxZoom && _this.options.maxZoom > _this.maxNativeZoom) { + _this.maxZoom = _this.options.maxZoom; + } + else { + _this.maxZoom = _this.maxNativeZoom; + } + + for (var i = 0; i <= _this.maxZoom; i++) { + scale = Math.pow(2, _this.maxNativeZoom - i); + width_ = Math.ceil(_this.x / scale); + height_ = Math.ceil(_this.y / scale); + tilesX_ = Math.ceil(width_ / _this.options.tileSize); + tilesY_ = Math.ceil(height_ / _this.options.tileSize); + tierSizes.push([tilesX_, tilesY_]); + imageSizes.push(L.point(width_,height_)); + } + + _this._tierSizes = tierSizes; + _this._imageSizes = imageSizes; + + // Resolved Deferred to initiate tilelayer load + _this._infoDeferred.resolve(); + }); + }, + + _setQuality: function() { + var _this = this; + var profileToCheck = _this.profile; + + if (_this._explicitQuality) { + return; + } + + // If profile is an object + if (typeof(profileToCheck) === 'object') { + profileToCheck = profileToCheck['@id']; + } + + // Set the quality based on the IIIF compliance level + switch (true) { + case /^http:\/\/library.stanford.edu\/iiif\/image-api\/1.1\/compliance.html.*$/.test(profileToCheck): + _this.options.quality = 'native'; + break; + // Assume later profiles and set to default + default: + _this.options.quality = 'default'; + break; + } + }, + + _infoToBaseUrl: function() { + return this._infoUrl.replace('info.json', ''); + }, + _templateUrl: function() { + return this._infoToBaseUrl() + '{region}/{size}/{rotation}/{quality}.{format}'; + }, + _isValidTile: function(coords) { + var _this = this, + zoom = _this._getZoomForUrl(), + sizes = _this._tierSizes[zoom], + x = coords.x, + y = (coords.y); + + if (!sizes) return false; + if (x < 0 || sizes[0] <= x || y < 0 || sizes[1] <= y) { + return false; + }else { + return true; + } + }, + _getInitialZoom: function (mapSize) { + var _this = this, + tolerance = 0.8, + imageSize; + + for (var i = _this.maxNativeZoom; i >= 0; i--) { + imageSize = this._imageSizes[i]; + if (imageSize.x * tolerance < mapSize.x && imageSize.y * tolerance < mapSize.y) { + return i; + } + } + // return a default zoom + return 2; + } +}); + +L.tileLayer.iiif = function(url, options) { + return new L.TileLayer.Iiif(url, options); +}; diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index a420722..4445b57 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -1,21 +1,276 @@ -const allmapsAnnotation = import("https://unpkg.com/@allmaps/annotation?module") -const allmapsTransform = import("https://unpkg.com/@allmaps/transform?module") - -Promise.all([allmapsAnnotation, allmapsTransform ]) - .then(([allmapsAnnotation, allmapsTransform]) => { - // Both modules loaded successfully - // Use the imported modules - $(document).ready(function () { - walkingTourJs(allmapsAnnotation, allmapsTransform) - }); - }) - .catch((error) => { - // An error occurred while loading one of the modules - console.error('Error loading modules:', error); +console.log("start") +/* + * Leaflet-IIIF 1.1.1 + * IIIF Viewer for Leaflet + * by Jack Reed, @mejackreed + */ + +const Iiif = L.TileLayer.extend({ + options: { + continuousWorld: true, + tileSize: 256, + updateWhenIdle: true, + tileFormat: 'jpg', + fitBounds: true + }, + + initialize: function(url, options) { + options = typeof options !== 'undefined' ? options : {}; + + if (options.maxZoom) { + this._customMaxZoom = true; + } + + // Check for explicit tileSize set + if (options.tileSize) { + this._explicitTileSize = true; + } + + // Check for an explicit quality + if (options.quality) { + this._explicitQuality = true; + } + + options = L.setOptions(this, options); + this._infoDeferred = new $.Deferred(); + this._infoUrl = url; + this._baseUrl = this._templateUrl(); + this._getInfo(); + }, + getTileUrl: function(coords) { + var _this = this, + x = coords.x, + y = (coords.y), + zoom = _this._getZoomForUrl(), + scale = Math.pow(2, _this.maxNativeZoom - zoom), + tileBaseSize = _this.options.tileSize * scale, + minx = (x * tileBaseSize), + miny = (y * tileBaseSize), + maxx = Math.min(minx + tileBaseSize, _this.x), + maxy = Math.min(miny + tileBaseSize, _this.y); + + var xDiff = (maxx - minx); + var yDiff = (maxy - miny); + + return L.Util.template(this._baseUrl, L.extend({ + format: _this.options.tileFormat, + quality: _this.quality, + region: [minx, miny, xDiff, yDiff].join(','), + rotation: 0, + size: Math.ceil(xDiff / scale) + ',' + }, this.options)); + }, + onAdd: function(map) { + var _this = this; + + // Wait for deferred to complete + $.when(_this._infoDeferred).done(function() { + + // Set maxZoom for map + map._layersMaxZoom = _this.maxZoom; + + // Call add TileLayer + L.TileLayer.prototype.onAdd.call(_this, map); + + if (_this.options.fitBounds) { + _this._fitBounds(); + } + + // Reset tile sizes to handle non 256x256 IIIF tiles + _this.on('tileload', function(tile, url) { + + var height = tile.tile.naturalHeight, + width = tile.tile.naturalWidth; + + // No need to resize if tile is 256 x 256 + if (height === 256 && width === 256) return; + + tile.tile.style.width = width + 'px'; + tile.tile.style.height = height + 'px'; + + }); + }); + }, + _fitBounds: function() { + var _this = this; + + // Find best zoom level and center map + var initialZoom = _this._getInitialZoom(_this._map.getSize()); + var imageSize = _this._imageSizes[initialZoom]; + var sw = _this._map.options.crs.pointToLatLng(L.point(0, imageSize.y), initialZoom); + var ne = _this._map.options.crs.pointToLatLng(L.point(imageSize.x, 0), initialZoom); + var bounds = L.latLngBounds(sw, ne); + + _this._map.fitBounds(bounds, true); + }, + _getInfo: function() { + var _this = this; + + // Look for a way to do this without jQuery + $.getJSON(_this._infoUrl) + .done(function(data) { + _this.y = data.height; + _this.x = data.width; + + var tierSizes = [], + imageSizes = [], + scale, + width_, + height_, + tilesX_, + tilesY_; + + // Set quality based off of IIIF version + if (data.profile instanceof Array) { + _this.profile = data.profile[0]; + }else { + _this.profile = data.profile; + } + + _this._setQuality(); + + // Unless an explicit tileSize is set, use a preferred tileSize + if (!_this._explicitTileSize) { + // Set the default first + _this.options.tileSize = 256; + if (data.tiles) { + // Image API 2.0 Case + _this.options.tileSize = data.tiles[0].width; + } else if (data.tile_width){ + // Image API 1.1 Case + _this.options.tileSize = data.tile_width; + } + } + + function ceilLog2(x) { + return Math.ceil(Math.log(x) / Math.LN2); + }; + + // Calculates maximum native zoom for the layer + _this.maxNativeZoom = Math.max(ceilLog2(_this.x / _this.options.tileSize), + ceilLog2(_this.y / _this.options.tileSize)); + + // Enable zooming further than native if maxZoom option supplied + if (_this._customMaxZoom && _this.options.maxZoom > _this.maxNativeZoom) { + _this.maxZoom = _this.options.maxZoom; + } + else { + _this.maxZoom = _this.maxNativeZoom; + } + + for (var i = 0; i <= _this.maxZoom; i++) { + scale = Math.pow(2, _this.maxNativeZoom - i); + width_ = Math.ceil(_this.x / scale); + height_ = Math.ceil(_this.y / scale); + tilesX_ = Math.ceil(width_ / _this.options.tileSize); + tilesY_ = Math.ceil(height_ / _this.options.tileSize); + tierSizes.push([tilesX_, tilesY_]); + imageSizes.push(L.point(width_,height_)); + } + + _this._tierSizes = tierSizes; + _this._imageSizes = imageSizes; + + // Resolved Deferred to initiate tilelayer load + _this._infoDeferred.resolve(); + }); + }, + + _setQuality: function() { + var _this = this; + var profileToCheck = _this.profile; + + if (_this._explicitQuality) { + return; + } + + // If profile is an object + if (typeof(profileToCheck) === 'object') { + profileToCheck = profileToCheck['@id']; + } + + // Set the quality based on the IIIF compliance level + switch (true) { + case /^http:\/\/library.stanford.edu\/iiif\/image-api\/1.1\/compliance.html.*$/.test(profileToCheck): + _this.options.quality = 'native'; + break; + // Assume later profiles and set to default + default: + _this.options.quality = 'default'; + break; + } + }, + + _infoToBaseUrl: function() { + return this._infoUrl.replace('info.json', ''); + }, + _templateUrl: function() { + return this._infoToBaseUrl() + '{region}/{size}/{rotation}/{quality}.{format}'; + }, + _isValidTile: function(coords) { + var _this = this, + zoom = _this._getZoomForUrl(), + sizes = _this._tierSizes[zoom], + x = coords.x, + y = (coords.y); + + if (!sizes) return false; + if (x < 0 || sizes[0] <= x || y < 0 || sizes[1] <= y) { + return false; + }else { + return true; + } + }, + _getInitialZoom: function (mapSize) { + var _this = this, + tolerance = 0.8, + imageSize; + + for (var i = _this.maxNativeZoom; i >= 0; i--) { + imageSize = this._imageSizes[i]; + if (imageSize.x * tolerance < mapSize.x && imageSize.y * tolerance < mapSize.y) { + return i; + } + } + // return a default zoom + return 2; + } }); + + const tiff = function(url, options) { + return new Iiif(url, options); + }; + +const getPackages = async function() { + const allmapsAnnotation = await import("https://unpkg.com/@allmaps/annotation?module") + const allmapsTransform = await import("https://unpkg.com/@allmaps/transform?module") + + return [allmapsAnnotation, allmapsTransform] +} - -function walkingTourJs(allmapsAnnotation, allmapsTransform) { +console.log(tiff) +async function main() { + let packages = await getPackages(); + console.log(packages); + console.log(tiff) + walkingTourJs(packages[0], packages[1], tiff) + } + +main() + +// .then(([allmapsAnnotation, allmapsTransform]) => { +// // Both modules loaded successfully +// // Use the imported modules +// console.log(L.tileLayer) +// walkingTourJs(allmapsAnnotation, allmapsTransform, L.tileLayer.iiif) +// }) +// .catch((error) => { +// // An error occurred while loading one of the modules +// console.error('Error loading modules:', error); +// }); + + +function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { var imported = document.createElement("script"); document.head.appendChild(imported); // Set map height to be window height minus header height. @@ -256,29 +511,52 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { * Query backend */ - window.onload = function () { - jqXhr = $.post('walking-tour/index/map-config', function (response) { - mapSetUp(response); - fetch(annotationUrl) - .then(response => { - // Check if the request was successful - if (!response.ok) { - throw new Error('Network response was not ok'); - } - // Parse the response as JSON - return response.json(); - }) - .then(data => { - const maps = allmapsAnnotation.parseAnnotation(data) - const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); - doQuery(transformer); - }) - .catch(error => { - // Handle any errors that occurred during the fetch - console.error('Fetch error:', error); - }); + // window.onload = function () { + // jqXhr = $.post('walking-tour/index/map-config', function (response) { + // const mapConfig = response + // mapSetUp(mapConfig, "https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:ht250943q") + // fetch(annotationUrl) + // .then(response => { + // // Check if the request was successful + // if (!response.ok) { + // throw new Error('Network response was not ok'); + // } + // // Parse the response as JSON + // return response.json(); + // }) + // .then(data => { + // const maps = allmapsAnnotation.parseAnnotation(data) + // const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); + // console.log(maps) + // doQuery(transformer, maps); + // }) + // .catch(error => { + // // Handle any errors that occurred during the fetch + // console.error('Fetch error:', error); + // }); + // }) + // }; + + fetch(annotationUrl) + .then(response => { + // Check if the request was successful + if (!response.ok) { + throw new Error('Network response was not ok'); + } + // Parse the response as JSON + return response.json(); }) - }; + .then(data => { + const maps = allmapsAnnotation.parseAnnotation(data) + const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); + console.log(maps) + mapSetUp(maps) + // doQuery(transformer, maps); + }) + .catch(error => { + // Handle any errors that occurred during the fetch + console.error('Fetch error:', error); + }); // Retain previous form state, if needed. retainFormState(); @@ -288,95 +566,107 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { * * Call only once during set up */ - function mapSetUp(response) { - EXHIBIT_BUTTON_TEXT = response['walking_tour_exhibit_button'] - DETAIL_BUTTON_TEXT = response['walking_tour_detail_button'] - MAP_MAX_ZOOM = parseInt(response['walking_tour_max_zoom']) - MAP_MIN_ZOOM = parseInt(response['walking_tour_min_zoom']) - MAP_CENTER = parse1DArrayPoint(response['walking_tour_center']) - MAP_ZOOM = parseInt(response["walking_tour_default_zoom"]) - MAP_MAX_BOUNDS = parse2DArrayPoint(response["walking_tour_max_bounds"]) - // Set the base map layer. + function mapSetUp(maps) { map = L.map('map', { - center: MAP_CENTER, - zoom: MAP_MIN_ZOOM, - minZoom: MAP_MIN_ZOOM, - maxZoom: MAP_MAX_ZOOM, - // maxBounds: MAP_MAX_BOUNDS, - zoomControl: false - }); - LOCATE_BOUNDS = map.getBounds(); - map.setZoom(MAP_ZOOM); - - map.addLayer(L.tileLayer(MAP_URL_TEMPLATE)); - map.addControl(L.control.zoom({ position: 'topleft' })); - var extentControl = L.Control.extend({ - options: { - position: 'topleft' - }, - onAdd: function (map) { - var container = L.DomUtil.create('div', 'extentControl'); - $(container).attr('id', 'extent-control'); - $(container).css('width', '26px').css('height', '26px').css('outline', '1px black'); - $(container).addClass('extentControl-disabled') - $(container).addClass('leaflet-bar') - $(container).on('click', function () { - map.flyTo(MAP_CENTER, MAP_ZOOM); - }); - return container; - } - }) - map.addControl(new extentControl()); - map.attributionControl.setPrefix('Tiles © Esri'); - - const warpedMapLayer = new Allmaps.WarpedMapLayer(annotationUrl) - map.addLayer(warpedMapLayer); - - map.on('zoomend', function () { - if (map.getZoom() == MAP_MIN_ZOOM) { - $('#extent-control').addClass('extentControl-disabled') - } else { - $('#extent-control').removeClass('extentControl-disabled') - } - }) + center: [0, 0], + crs: L.CRS.Simple, + zoom: 0 + }); + console.log(maps) + map.addLayer(iiif(maps[0].resource.id+'/info.json', { + fitBounds: true + })); + var bounds = [maps[0].resourceMask[0], maps[0].resourceMask[2]] + console.log(map.getBounds()) + + + // EXHIBIT_BUTTON_TEXT = response['walking_tour_exhibit_button'] + // DETAIL_BUTTON_TEXT = response['walking_tour_detail_button'] + // MAP_MAX_ZOOM = parseInt(response['walking_tour_max_zoom']) + // MAP_MIN_ZOOM = parseInt(response['walking_tour_min_zoom']) + // MAP_CENTER = parse1DArrayPoint(response['walking_tour_center']) + // MAP_ZOOM = parseInt(response["walking_tour_default_zoom"]) + // MAP_MAX_BOUNDS = parse2DArrayPoint(response["walking_tour_max_bounds"]) + // // Set the base map layer. + // map = L.map('map', { + // center: MAP_CENTER, + // zoom: MAP_MIN_ZOOM, + // minZoom: MAP_MIN_ZOOM, + // maxZoom: MAP_MAX_ZOOM, + // zoomControl: false + // }); + // LOCATE_BOUNDS = map.getBounds(); + // map.setZoom(MAP_ZOOM); + + // map.addLayer(L.tileLayer(MAP_URL_TEMPLATE)); + // map.addControl(L.control.zoom({ position: 'topleft' })); + // var extentControl = L.Control.extend({ + // options: { + // position: 'topleft' + // }, + // onAdd: function (map) { + // var container = L.DomUtil.create('div', 'extentControl'); + // $(container).attr('id', 'extent-control'); + // $(container).css('width', '26px').css('height', '26px').css('outline', '1px black'); + // $(container).addClass('extentControl-disabled') + // $(container).addClass('leaflet-bar') + // $(container).on('click', function () { + // map.flyTo(MAP_CENTER, MAP_ZOOM); + // }); + // return container; + // } + // }) + // map.addControl(new extentControl()); + // map.attributionControl.setPrefix('Tiles © Esri'); + + // const warpedMapLayer = new Allmaps.WarpedMapLayer(annotationUrl) + // map.addLayer(warpedMapLayer); + + // map.on('zoomend', function () { + // if (map.getZoom() == MAP_MIN_ZOOM) { + // $('#extent-control').addClass('extentControl-disabled') + // } else { + // $('#extent-control').removeClass('extentControl-disabled') + // } + // }) // Handle location found. - map.on('locationfound', function (e) { - if (!locationMarker) { - $("#locate-button").toggleClass('loading'); - } - // User within location bounds. Set the location marker. - if (L.latLngBounds(LOCATE_BOUNDS).contains(e.latlng)) { - if (locationMarker) { - // Remove the existing location marker before adding to map. - map.removeLayer(locationMarker); - } else { - // Pan to location only on first locate. - map.panTo(e.latlng); - } - locationMarker = L.marker(e.latlng, { - icon: L.icon({ - iconUrl: 'plugins/WalkingTour/views/public/images/location.png', - iconSize: [25, 25] - }) - }); - locationMarker.addTo(map).bindPopup("You are within " + e.accuracy / 2 + " meters from this point"); - // User outside location bounds. - } else { - var locateMeters = e.latlng.distanceTo(map.options.center); - var locateMiles = Math.ceil((locateMeters * 0.000621371) * 100) / 100; - alert('Cannot locate your location. You are ' + locateMiles + ' miles from the map bounds.'); - map.stopLocate(); - } - }); - - // Handle location error. - map.on('locationerror', function () { - $("#locate-button").toggleClass('loading'); - map.stopLocate(); - alert('Location Error, Please try again.'); - console.log('location error') - }); + // map.on('locationfound', function (e) { + // if (!locationMarker) { + // $("#locate-button").toggleClass('loading'); + // } + // // User within location bounds. Set the location marker. + // if (L.latLngBounds(LOCATE_BOUNDS).contains(e.latlng)) { + // if (locationMarker) { + // // Remove the existing location marker before adding to map. + // map.removeLayer(locationMarker); + // } else { + // // Pan to location only on first locate. + // map.panTo(e.latlng); + // } + // locationMarker = L.marker(e.latlng, { + // icon: L.icon({ + // iconUrl: 'plugins/WalkingTour/views/public/images/location.png', + // iconSize: [25, 25] + // }) + // }); + // locationMarker.addTo(map).bindPopup("You are within " + e.accuracy / 2 + " meters from this point"); + // // User outside location bounds. + // } else { + // var locateMeters = e.latlng.distanceTo(map.options.center); + // var locateMiles = Math.ceil((locateMeters * 0.000621371) * 100) / 100; + // alert('Cannot locate your location. You are ' + locateMiles + ' miles from the map bounds.'); + // map.stopLocate(); + // } + // }); + + // // Handle location error. + // map.on('locationerror', function () { + // $("#locate-button").toggleClass('loading'); + // map.stopLocate(); + // alert('Location Error, Please try again.'); + // console.log('location error') + // }); } /* @@ -392,7 +682,6 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { padding: 0.2rem 0 0.18rem 0; font-size: 15px; ` - // correctly formats coordinates as [lat, long] (API returns [long, lat]) function orderCoords(path) { var directions = []; @@ -436,21 +725,21 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform) { var numMarker = 1; var response = value["Data"]; var itemIDList = []; - console.log(transformer) - console.log(response.features) + // console.log(transformer) + // console.log(response.features) response.features.map(ele => { const test = transformer.transformBackward( ele.geometry ) - console.log(test) + // console.log(test) itemIDList.push(ele.properties.id) return { ...ele, geometry: test } }) - console.log(response.features) + // console.log(response.features) tourToItem[tourId] = itemIDList; markerList = [] var geoJsonLayer = L.geoJson(response.features, { From a0a2f84f6238bb355565cf42723621c360baa9f4 Mon Sep 17 00:00:00 2001 From: tutingjun Date: Sun, 28 Apr 2024 22:21:15 -0500 Subject: [PATCH 04/11] add points --- views/public/javascripts/walking-tour.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index 4445b57..124567d 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -551,7 +551,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); console.log(maps) mapSetUp(maps) - // doQuery(transformer, maps); + doQuery(transformer, maps); }) .catch(error => { // Handle any errors that occurred during the fetch @@ -732,7 +732,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { const test = transformer.transformBackward( ele.geometry ) - // console.log(test) + console.log(test) itemIDList.push(ele.properties.id) return { ...ele, From cd39a211277e75cfe114b1a63b0752ed84d1c4a3 Mon Sep 17 00:00:00 2001 From: tutingjun Date: Mon, 29 Apr 2024 15:16:46 -0500 Subject: [PATCH 05/11] add markers --- views/public/javascripts/walking-tour.js | 245 +++++++++++++++-------- 1 file changed, 167 insertions(+), 78 deletions(-) diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index 124567d..2b45608 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -237,9 +237,9 @@ const Iiif = L.TileLayer.extend({ } }); - const tiff = function(url, options) { - return new Iiif(url, options); - }; +const tiff = function(url, options) { +return new Iiif(url, options); +}; const getPackages = async function() { const allmapsAnnotation = await import("https://unpkg.com/@allmaps/annotation?module") @@ -550,7 +550,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { const maps = allmapsAnnotation.parseAnnotation(data) const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); console.log(maps) - mapSetUp(maps) + mapSetUp(maps[0]) doQuery(transformer, maps); }) .catch(error => { @@ -567,18 +567,39 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { * Call only once during set up */ function mapSetUp(maps) { + console.log(maps.resource.height) + console.log( $('#map').height()) + var zoom = maps.resource.height / $('#map').height() + console.log(zoom) map = L.map('map', { center: [0, 0], crs: L.CRS.Simple, zoom: 0 }); - console.log(maps) - map.addLayer(iiif(maps[0].resource.id+'/info.json', { - fitBounds: true - })); - var bounds = [maps[0].resourceMask[0], maps[0].resourceMask[2]] - console.log(map.getBounds()) + iiif(maps.resource.id+'/info.json', { + fitBounds: true, + setMaxBounds: true + }).addTo(map) + map.on('zoomend', function() { + console.log(map.getZoom()) + }); + // map.setZoom(zoom) + // var bounds = L.bounds(L.point(maps.resourceMask[0][0], maps.resourceMask[0][1]), L.point(maps.resourceMask[2][0], maps.resourceMask[2][1])); + + // console.log(bounds) + // map.fitBounds(bounds) + console.log(map.getBounds(), map.getZoom()) + console.log(L.CRS.Simple.latLngToPoint(map.getBounds(), 0)) + map.onZoom + // var rect = L.rectangle(map.getBounds(), {color: 'blue', weight: 1}).on('click', function (e) { + // // There event is event object + // // there e.type === 'click' + // // there e.lanlng === L.LatLng on map + // // there e.target.getLatLngs() - your rectangle coordinates + // // but e.target !== rect + // console.info(e); + // }).addTo(map); // EXHIBIT_BUTTON_TEXT = response['walking_tour_exhibit_button'] // DETAIL_BUTTON_TEXT = response['walking_tour_detail_button'] @@ -714,6 +735,15 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { var url; var itemArray = [] var tourToItem = {} + + var yx = L.latLng; + + var xy = function(x, y) { + if (Array.isArray(x)) { // When doing xy([x, y]); + return yx(x[1], x[0]); + } + return yx(y, x); // When doing xy(x, y); + }; jqXhr = $.post('walking-tour/index/query', function (response) { markerData = response; dataArray = Object.entries(markerData) @@ -728,90 +758,149 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { // console.log(transformer) // console.log(response.features) - response.features.map(ele => { - const test = transformer.transformBackward( + newList = [] + + response.features = response.features.map(ele => { + var test = transformer.transformBackward( ele.geometry ) - console.log(test) + test = test.map(ele => {return ele/7}) + // console.log(test) itemIDList.push(ele.properties.id) - return { + return({ ...ele, geometry: test - } + }) }) - // console.log(response.features) + console.log(response.features) tourToItem[tourId] = itemIDList; markerList = [] - var geoJsonLayer = L.geoJson(response.features, { - // adds the correct number to each marker based on order of tour - pointToLayer: function (feature, latlng) { - var numberIcon = L.divIcon({ - className: "my-custom-pin", - iconSize: [25, 41], - iconAnchor: [12, 40], - popupAnchor: [0, -5], - html: `

${numMarker}

` - }); - numMarker++; - return L.marker(latlng, { icon: numberIcon }); - }, - onEachFeature: function (feature, layer) { - layer.on('click', function (e) { - // center click location - map.flyTo(e.latlng,MAP_MAX_ZOOM); - // Close the filtering - var filterButton = $('filter-button'); - filterButton.removeClass('on'). - find('.screen-reader-text'). - html('Filters'); - $('#filters').fadeOut(200, 'linear'); - - var marker = this; - response = allItems[`${tourId}:${feature.properties.id}`] - if (response == undefined) { - $.post('walking-tour/index/get-item', { id: feature.properties.id, tour: tourId }, function (response) { - allItems[`${tourId}:${feature.properties.id}`] = response; - featureOnclickAction(response, layer, marker, itemIDList, value, tourId); - }) - } else { - featureOnclickAction(response, layer, marker, itemIDList, value, tourId); + + response.features.forEach(feature => { + var numberIcon = L.divIcon({ + className: "my-custom-pin", + iconSize: [25, 41], + iconAnchor: [12, 40], + popupAnchor: [0, -5], + html: `

${numMarker}

` + }); + numMarker++; + + var marker = L.marker(xy(feature.geometry[0], feature.geometry[1]), { icon: numberIcon }); + marker.on('click', function (e) { + // center click location + map.flyTo(e.latlng, 0); + // Close the filtering + var filterButton = $('filter-button'); + filterButton.removeClass('on'). + find('.screen-reader-text'). + html('Filters'); + $('#filters').fadeOut(200, 'linear'); + + var marker = this; + response = allItems[`${tourId}:${feature.properties.id}`] + if (response == undefined) { + $.post('walking-tour/index/get-item', { id: feature.properties.id, tour: tourId }, function (response) { + allItems[`${tourId}:${feature.properties.id}`] = response; + + + + var popupContent = '

' + response.title + '

'; + if (response.thumbnail) { + popupContent += '' + response.thumbnail + '
'; + } + popupContent += 'View More Info'; + if (!marker.getPopup()) { + marker.bindPopup(popupContent, { maxWidth: 200, offset: L.point(0, -40) }).openPopup(); + allMarkers[response.id] = marker; + } + }) + } else { + var popupContent = '

' + response.title + '

'; + if (response.thumbnail) { + popupContent += '' + response.thumbnail + '
'; + } + popupContent += 'View More Info'; + if (!marker.getPopup()) { + marker.bindPopup(popupContent, { maxWidth: 200, offset: L.point(0, -40) }).openPopup(); + allMarkers[response.id] = marker; } + } + }) + marker.addTo(map) + }) - }); - } - }); + + // var geoJsonLayer = L.geoJson(response.features, { + // // adds the correct number to each marker based on order of tour + // pointToLayer: function (feature, latlng) { + // var numberIcon = L.divIcon({ + // className: "my-custom-pin", + // iconSize: [25, 41], + // iconAnchor: [12, 40], + // popupAnchor: [0, -5], + // html: `

${numMarker}

` + // }); + // numMarker++; + // console.log(latlng) + // return L.marker(latlng, { icon: numberIcon }); + // }, + // onEachFeature: function (feature, layer) { + // layer.on('click', function (e) { + // // center click location + // map.flyTo(e.latlng,MAP_MAX_ZOOM); + // // Close the filtering + // var filterButton = $('filter-button'); + // filterButton.removeClass('on'). + // find('.screen-reader-text'). + // html('Filters'); + // $('#filters').fadeOut(200, 'linear'); + + // var marker = this; + // response = allItems[`${tourId}:${feature.properties.id}`] + // if (response == undefined) { + // $.post('walking-tour/index/get-item', { id: feature.properties.id, tour: tourId }, function (response) { + // allItems[`${tourId}:${feature.properties.id}`] = response; + // featureOnclickAction(response, layer, marker, itemIDList, value, tourId); + // }) + // } else { + // featureOnclickAction(response, layer, marker, itemIDList, value, tourId); + // } + + // }); + + // } + // }); markerData[tourId].allMarker = markerList; - markerData[tourId].geoJson = geoJsonLayer; - var walkingPath = []; - var json_content = response.features; - var pointList = []; - for (var i = 0; i < json_content.length; i++) { - lat = json_content[i].geometry.coordinates[1]; - lng = json_content[i].geometry.coordinates[0]; - var point = new L.LatLng(lat, lng); - pointList[i] = point; - } - getOverallPath(pointList, key).then((data) => { - var path = data["features"][0]["geometry"]["coordinates"]; - path = orderCoords(path); - for (var p of path) { - walkingPath.push(p); - } - var tourPolyline = new L.Polyline(walkingPath, { - color: value["Color"], - weight: 3, - opacity: 1, - smoothFactor: 1 - }); - markerData[tourId].walkingPath = tourPolyline; - resolve() - }); + // var json_content = response.features; + // var pointList = []; + // for (var i = 0; i < json_content.length; i++) { + // lat = json_content[i].geometry.coordinates[1]; + // lng = json_content[i].geometry.coordinates[0]; + // var point = new L.LatLng(lat, lng); + // pointList[i] = point; + // } + // getOverallPath(pointList, key).then((data) => { + // var path = data["features"][0]["geometry"]["coordinates"]; + // path = orderCoords(path); + // for (var p of path) { + // walkingPath.push(p); + // } + // var tourPolyline = new L.Polyline(walkingPath, { + // color: value["Color"], + // weight: 3, + // opacity: 1, + // smoothFactor: 1 + // }); + // markerData[tourId].walkingPath = tourPolyline; + // resolve() + // }); }); }) Promise.all(requests).then(() => { createCustomCSS(); - doFilters(); + // doFilters(); }); }); } From 742bdea494d34d025fdff170d16355eabf0f0ce8 Mon Sep 17 00:00:00 2001 From: tutingjun Date: Tue, 7 May 2024 10:54:21 -0500 Subject: [PATCH 06/11] use image overlay instead of iiif --- views/public/javascripts/walking-tour.js | 60 ++++++++++++++++-------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index 2b45608..f98e46d 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -100,7 +100,6 @@ const Iiif = L.TileLayer.extend({ var sw = _this._map.options.crs.pointToLatLng(L.point(0, imageSize.y), initialZoom); var ne = _this._map.options.crs.pointToLatLng(L.point(imageSize.x, 0), initialZoom); var bounds = L.latLngBounds(sw, ne); - _this._map.fitBounds(bounds, true); }, _getInfo: function() { @@ -234,6 +233,9 @@ const Iiif = L.TileLayer.extend({ } // return a default zoom return 2; + }, + _getImageSize: function() { + return this._imageSizes; } }); @@ -298,6 +300,17 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { var allItems = {}; var allMarkers = {}; + var imageZoom; + + var yx = L.latLng; + + var xy = function(x, y) { + if (Array.isArray(x)) { // When doing xy([x, y]); + return yx(x[1], x[0]); + } + return yx(y, x); // When doing xy(x, y); + }; + /* @@ -550,6 +563,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { const maps = allmapsAnnotation.parseAnnotation(data) const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); console.log(maps) + imageZoom = maps[0].resource.height / $('#map').height() mapSetUp(maps[0]) doQuery(transformer, maps); }) @@ -567,19 +581,29 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { * Call only once during set up */ function mapSetUp(maps) { - console.log(maps.resource.height) - console.log( $('#map').height()) - var zoom = maps.resource.height / $('#map').height() - console.log(zoom) + var bounds = [[0,0], [6950/imageZoom, 9428/imageZoom]]; + var center = [(bounds[1][0] - bounds[0][0])/ 2, (bounds[1][1] - bounds[0][1])/ 2] map = L.map('map', { - center: [0, 0], + center: center, crs: L.CRS.Simple, - zoom: 0 + zoom: 0, + maxBounds: bounds }); - iiif(maps.resource.id+'/info.json', { - fitBounds: true, - setMaxBounds: true - }).addTo(map) + + console.log(map.getSize()) + + // const iiif_layer = iiif(maps.resource.id+'/info.json', { + // fitBounds: true, + // setMaxBounds: true, + // }).addTo(map) + var bounds = [[0,0], [6950/imageZoom, 9428/imageZoom]]; + var image = L.imageOverlay('https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:ht250943q/full/9428,/0/default.jpg', bounds).addTo(map); + + // console.log(iiif_layer) + // console.log(iiif_layer._getImageSize()) + // const imageSize = iiif_layer._imageSizes.map(ele => { + // return xy(ele[0], ele[1]) + // }) map.on('zoomend', function() { console.log(map.getZoom()) @@ -589,10 +613,8 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { // console.log(bounds) // map.fitBounds(bounds) - console.log(map.getBounds(), map.getZoom()) - console.log(L.CRS.Simple.latLngToPoint(map.getBounds(), 0)) - map.onZoom - // var rect = L.rectangle(map.getBounds(), {color: 'blue', weight: 1}).on('click', function (e) { + // console.log(map.getBounds(), map.getZoom()) + // var rect = L.rectangle(imageSize, {color: 'blue', weight: 1}).on('click', function (e) { // // There event is event object // // there e.type === 'click' // // there e.lanlng === L.LatLng on map @@ -764,7 +786,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { var test = transformer.transformBackward( ele.geometry ) - test = test.map(ele => {return ele/7}) + test = test.map(ele => {return ele/imageZoom}) // console.log(test) itemIDList.push(ele.properties.id) return({ @@ -789,7 +811,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { var marker = L.marker(xy(feature.geometry[0], feature.geometry[1]), { icon: numberIcon }); marker.on('click', function (e) { // center click location - map.flyTo(e.latlng, 0); + map.flyTo(e.latlng, 4); // Close the filtering var filterButton = $('filter-button'); filterButton.removeClass('on'). @@ -809,7 +831,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { if (response.thumbnail) { popupContent += '' + response.thumbnail + '
'; } - popupContent += 'View More Info'; + popupContent += 'View More Info'; if (!marker.getPopup()) { marker.bindPopup(popupContent, { maxWidth: 200, offset: L.point(0, -40) }).openPopup(); allMarkers[response.id] = marker; @@ -820,7 +842,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { if (response.thumbnail) { popupContent += '' + response.thumbnail + '
'; } - popupContent += 'View More Info'; + popupContent += 'View More Info'; if (!marker.getPopup()) { marker.bindPopup(popupContent, { maxWidth: 200, offset: L.point(0, -40) }).openPopup(); allMarkers[response.id] = marker; From 3f44ad61b2d3aa631348fc876837eb3fd2e8e617 Mon Sep 17 00:00:00 2001 From: tutingjun Date: Tue, 7 May 2024 12:08:34 -0500 Subject: [PATCH 07/11] remove hard coded width --- views/public/javascripts/walking-tour.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index f98e46d..adde717 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -581,23 +581,22 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { * Call only once during set up */ function mapSetUp(maps) { - var bounds = [[0,0], [6950/imageZoom, 9428/imageZoom]]; + var mapHeight = maps.resource.height / imageZoom + var mapWidth = maps.resource.width / imageZoom + var bounds = [[0,0], [mapHeight, mapWidth]]; var center = [(bounds[1][0] - bounds[0][0])/ 2, (bounds[1][1] - bounds[0][1])/ 2] map = L.map('map', { center: center, crs: L.CRS.Simple, - zoom: 0, + zoom: -1, maxBounds: bounds }); - console.log(map.getSize()) - // const iiif_layer = iiif(maps.resource.id+'/info.json', { // fitBounds: true, // setMaxBounds: true, // }).addTo(map) - var bounds = [[0,0], [6950/imageZoom, 9428/imageZoom]]; - var image = L.imageOverlay('https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:ht250943q/full/9428,/0/default.jpg', bounds).addTo(map); + var image = L.imageOverlay('https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:ht250943q/full/'+ maps.resource.width +',/0/default.jpg', bounds).addTo(map); // console.log(iiif_layer) // console.log(iiif_layer._getImageSize()) From 786ad30ee733d2aa6b3b390191eb169aa1b36f49 Mon Sep 17 00:00:00 2001 From: tutingjun Date: Tue, 7 May 2024 13:18:11 -0500 Subject: [PATCH 08/11] update --- views/public/javascripts/walking-tour.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index adde717..159de66 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -280,7 +280,8 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { $('#map').css('height', windowheight - 54); var MAP_URL_TEMPLATE = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}'; - const annotationUrl = 'https://annotations.allmaps.org/manifests/47574ee029cca631' + // const annotationUrl = 'https://annotations.allmaps.org/manifests/47574ee029cca631' + const annotationUrl = "https://annotations.allmaps.org/manifests/c047e9dd35f2d377" var MAP_CENTER; var MAP_ZOOM; // MAP_ZOOM controls the default zoom of the map @@ -596,8 +597,9 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { // fitBounds: true, // setMaxBounds: true, // }).addTo(map) - var image = L.imageOverlay('https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:ht250943q/full/'+ maps.resource.width +',/0/default.jpg', bounds).addTo(map); - + console.log(maps.resource.id +'/full/'+ maps.resource.width +',/0/default.jpg') + var image = L.imageOverlay(maps.resource.id +'/full/'+ $('#map').width() +',/0/default.jpg', bounds).addTo(map); + console.log(image) // console.log(iiif_layer) // console.log(iiif_layer._getImageSize()) // const imageSize = iiif_layer._imageSizes.map(ele => { From e7060b6976cc4ac19d38d442df18aac2d18c18d3 Mon Sep 17 00:00:00 2001 From: tutingjun Date: Thu, 30 May 2024 22:11:10 -0500 Subject: [PATCH 09/11] update url --- views/public/javascripts/walking-tour.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index 159de66..aeb9602 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -245,7 +245,7 @@ return new Iiif(url, options); const getPackages = async function() { const allmapsAnnotation = await import("https://unpkg.com/@allmaps/annotation?module") - const allmapsTransform = await import("https://unpkg.com/@allmaps/transform?module") + const allmapsTransform = await import("https://unpkg.com/@allmaps/transform@1.0.0-beta.37/dist/bundled/index.es.js?module") return [allmapsAnnotation, allmapsTransform] } @@ -280,8 +280,8 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { $('#map').css('height', windowheight - 54); var MAP_URL_TEMPLATE = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}'; - // const annotationUrl = 'https://annotations.allmaps.org/manifests/47574ee029cca631' - const annotationUrl = "https://annotations.allmaps.org/manifests/c047e9dd35f2d377" + const annotationUrl = 'https://annotations.allmaps.org/manifests/47574ee029cca631' + // const annotationUrl = "https://annotations.allmaps.org/manifests/c047e9dd35f2d377" var MAP_CENTER; var MAP_ZOOM; // MAP_ZOOM controls the default zoom of the map From eaca3a3361063011d267607760d44706381cdafa Mon Sep 17 00:00:00 2001 From: zhouk2 Date: Mon, 25 May 2026 19:24:48 -0500 Subject: [PATCH 10/11] Add Omeka locations GeoJSON overlay --- views/public/data/omeka-locations.geojson | 5973 +++++++++++++++++ .../javascripts/omeka-locations-to-geojson.js | 48 + .../omeka-locations-to-geojson.php | 79 + views/public/javascripts/walking-tour.js | 101 +- 4 files changed, 6193 insertions(+), 8 deletions(-) create mode 100644 views/public/data/omeka-locations.geojson create mode 100644 views/public/javascripts/omeka-locations-to-geojson.js create mode 100644 views/public/javascripts/omeka-locations-to-geojson.php diff --git a/views/public/data/omeka-locations.geojson b/views/public/data/omeka-locations.geojson new file mode 100644 index 0000000..d4530ec --- /dev/null +++ b/views/public/data/omeka-locations.geojson @@ -0,0 +1,5973 @@ +{ + "type": "FeatureCollection", + "name": "omeka_locations", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.472867, + 41.900524 + ] + }, + "properties": { + "id": 1, + "item_id": 8, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.900524, 12.472867" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487928, + 41.89359 + ] + }, + "properties": { + "id": 2, + "item_id": 5, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.893590, 12.487928" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48667, + 41.895959 + ] + }, + "properties": { + "id": 3, + "item_id": 6, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.895959, 12.486670" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498546, + 41.897557 + ] + }, + "properties": { + "id": 4, + "item_id": 1, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.897557, 12.498546" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477983, + 41.890783 + ] + }, + "properties": { + "id": 5, + "item_id": 4, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.890783, 12.477983" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.472214, + 41.899174 + ] + }, + "properties": { + "id": 6, + "item_id": 7, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.899174, 12.472214" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.480039, + 41.894203 + ] + }, + "properties": { + "id": 7, + "item_id": 3, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.894203, 12.480039" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4698422, + 41.9001702 + ] + }, + "properties": { + "id": 8, + "item_id": 153, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.9001702, 12.4698422" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4698422, + 41.9001702 + ] + }, + "properties": { + "id": 10, + "item_id": 154, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.9001702, 12.4698422" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.49272108078, + 41.890469399832 + ] + }, + "properties": { + "id": 11, + "item_id": 155, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4769, + 41.8986 + ] + }, + "properties": { + "id": 12, + "item_id": 156, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8986, 12.4769" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4922, + 41.8902 + ] + }, + "properties": { + "id": 13, + "item_id": 157, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8902, 12.4922" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4769772669522, + 41.9025577839289 + ] + }, + "properties": { + "id": 14, + "item_id": 158, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.90255778392887, 12.476977266952224" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498546, + 41.897557 + ] + }, + "properties": { + "id": 15, + "item_id": 165, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.897557, 12.498546" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.480055197821, + 41.894545377593 + ] + }, + "properties": { + "id": 16, + "item_id": 166, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89454537759293, 12.480055197821097" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477983, + 41.890783 + ] + }, + "properties": { + "id": 17, + "item_id": 167, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.890783, 12.477983" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487928, + 41.89359 + ] + }, + "properties": { + "id": 18, + "item_id": 168, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.893590, 12.487928" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48667, + 41.895959 + ] + }, + "properties": { + "id": 19, + "item_id": 169, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.895959, 12.486670" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.472867, + 41.900524 + ] + }, + "properties": { + "id": 20, + "item_id": 170, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.900524, 12.472867" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473149997822, + 41.901282137244 + ] + }, + "properties": { + "id": 21, + "item_id": 171, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.901282137243555, 12.473149997822318" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482542061316, + 41.908487466461 + ] + }, + "properties": { + "id": 22, + "item_id": 172, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90848746646136, 12.482542061315895" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483254355492, + 41.894194444419 + ] + }, + "properties": { + "id": 23, + "item_id": 174, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.894194444418765, 12.483254355492441" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461419682481, + 41.888603700412 + ] + }, + "properties": { + "id": 24, + "item_id": 177, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88860370041222, 12.461419682481113" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485100938305, + 41.878855514876 + ] + }, + "properties": { + "id": 25, + "item_id": 178, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8788555148763, 12.485100938304804" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470728637736, + 41.892557835475 + ] + }, + "properties": { + "id": 26, + "item_id": 180, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89255783547505, 12.470728637735547" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470728637736, + 41.892557835475 + ] + }, + "properties": { + "id": 27, + "item_id": 181, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89255783547505, 12.470728637735547" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461481359519, + 41.901528079675 + ] + }, + "properties": { + "id": 28, + "item_id": 182, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90152807967454, 12.461481359518613" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495929982481, + 41.880650097867 + ] + }, + "properties": { + "id": 29, + "item_id": 184, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88065009786724, 12.49592998248082" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494621124811, + 41.885575333712 + ] + }, + "properties": { + "id": 30, + "item_id": 185, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88557533371161, 12.49462112481059" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.471554362811, + 41.899377902131 + ] + }, + "properties": { + "id": 31, + "item_id": 186, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477932426657, + 41.887565680185 + ] + }, + "properties": { + "id": 32, + "item_id": 187, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88756568018467, 12.477932426657022" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494631853646, + 41.885567346311 + ] + }, + "properties": { + "id": 33, + "item_id": 188, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885567346311106, 12.494631853645792" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467599868987, + 41.892391717093 + ] + }, + "properties": { + "id": 34, + "item_id": 189, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89239171709264, 12.467599868986841" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4754483063, + 41.889452938315 + ] + }, + "properties": { + "id": 35, + "item_id": 190, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.88945293831456, 12.475448306300217" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473704611316, + 41.88925901169 + ] + }, + "properties": { + "id": 36, + "item_id": 191, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88925901169028, 12.473704611316352" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.524108513162, + 41.867179746198 + ] + }, + "properties": { + "id": 37, + "item_id": 192, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.86717974619808, 12.524108513162032" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476563068987, + 41.887333642226 + ] + }, + "properties": { + "id": 38, + "item_id": 193, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887333642225876, 12.476563068986671" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.488628040152, + 41.890884967797 + ] + }, + "properties": { + "id": 39, + "item_id": 194, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890884967796964, 12.488628040151585" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479865382481, + 41.892102491006 + ] + }, + "properties": { + "id": 40, + "item_id": 195, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892102491006504, 12.479865382481174" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485133497822, + 41.886321081207 + ] + }, + "properties": { + "id": 41, + "item_id": 196, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88632108120653, 12.485133497821781" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.475608039812, + 41.877324145199 + ] + }, + "properties": { + "id": 42, + "item_id": 197, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.87732414519913, 12.475608039812117" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473406069363, + 41.885153678593 + ] + }, + "properties": { + "id": 43, + "item_id": 198, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885153678593056, 12.47340606936262" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476031068987, + 41.907629933922 + ] + }, + "properties": { + "id": 44, + "item_id": 199, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90762993392159, 12.476031068987332" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.464158297822, + 41.888980686395 + ] + }, + "properties": { + "id": 45, + "item_id": 200, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "41.88898068639497, 12.464158297821875" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494642582481, + 41.88563923288 + ] + }, + "properties": { + "id": 46, + "item_id": 202, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "41.88563923287975, 12.494642582480987" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467286797822, + 41.893723168251 + ] + }, + "properties": { + "id": 47, + "item_id": 203, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89372316825104, 12.467286797822025" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467286797822, + 41.893723168251 + ] + }, + "properties": { + "id": 48, + "item_id": 204, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89372316825104, 12.467286797822025" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466322253646, + 41.88888936067 + ] + }, + "properties": { + "id": 49, + "item_id": 205, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88888936067022, 12.466322253645888" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.450085701258, + 41.917846368856 + ] + }, + "properties": { + "id": 50, + "item_id": 206, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.917846368855585, 12.450085701257574" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.481494913162, + 41.876862086023 + ] + }, + "properties": { + "id": 51, + "item_id": 207, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.876862086022605, 12.481494913162338" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466357, + 41.900659 + ] + }, + "properties": { + "id": 52, + "item_id": 208, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498797726657, + 41.896645808991 + ] + }, + "properties": { + "id": 53, + "item_id": 212, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89664580899126, 12.498797726657342" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48305, + 41.893515 + ] + }, + "properties": { + "id": 54, + "item_id": 213, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8935273643236, 12.482750017140422" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.481633297822, + 41.888214953099 + ] + }, + "properties": { + "id": 55, + "item_id": 214, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.888214953099265, 12.481633297821924" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483134024811, + 41.889692476063 + ] + }, + "properties": { + "id": 56, + "item_id": 215, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.889692476062926, 12.483134024810733" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.523157, + 41.848302 + ] + }, + "properties": { + "id": 57, + "item_id": 216, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.848302, 12.523157" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478022597822, + 41.898256304565 + ] + }, + "properties": { + "id": 58, + "item_id": 217, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89825630456512, 12.478022597822216" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473736797822, + 41.889266998629 + ] + }, + "properties": { + "id": 59, + "item_id": 218, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88926699862922, 12.473736797821946" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.456739026657, + 41.902406141284 + ] + }, + "properties": { + "id": 60, + "item_id": 219, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.902406141284445, 12.456739026656512" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.501519911316, + 41.873656762765 + ] + }, + "properties": { + "id": 61, + "item_id": 220, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.87365676276507, 12.501519911315821" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47764, + 41.883599 + ] + }, + "properties": { + "id": 62, + "item_id": 221, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.493119341998, + 41.897107561691 + ] + }, + "properties": { + "id": 63, + "item_id": 223, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8971075616912, 12.49311934199818" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476542, + 41.887326 + ] + }, + "properties": { + "id": 64, + "item_id": 224, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887326, 12.476542" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473052740152, + 41.899350942919 + ] + }, + "properties": { + "id": 65, + "item_id": 225, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899350942919064, 12.473052740151838" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478674, + 41.89287 + ] + }, + "properties": { + "id": 66, + "item_id": 226, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892870, 12.478674" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482589884327, + 41.893142440884 + ] + }, + "properties": { + "id": 67, + "item_id": 227, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.89314244088442, 12.482589884326694" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461381197822, + 41.901055325001 + ] + }, + "properties": { + "id": 68, + "item_id": 228, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.901055325000776, 12.461381197822313" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.462722197966, + 41.900260110662 + ] + }, + "properties": { + "id": 69, + "item_id": 229, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.90026011066239, 12.462722197965613" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470092, + 41.895641 + ] + }, + "properties": { + "id": 70, + "item_id": 230, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.895641, 12.470092 " + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483972, + 41.893667 + ] + }, + "properties": { + "id": 71, + "item_id": 231, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.893667, 12.483972" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482611, + 41.893306 + ] + }, + "properties": { + "id": 72, + "item_id": 232, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.893306, 12.482611" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.489694, + 41.8905 + ] + }, + "properties": { + "id": 73, + "item_id": 234, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890500, 12.489694" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473773956299, + 41.898726472995 + ] + }, + "properties": { + "id": 74, + "item_id": 237, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469805957908, + 41.89187498377 + ] + }, + "properties": { + "id": 75, + "item_id": 238, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89187498376976, 12.469805957907566" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479297338637, + 41.890110066719 + ] + }, + "properties": { + "id": 76, + "item_id": 239, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89011006671925, 12.479297338636828" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4771113, + 41.889585 + ] + }, + "properties": { + "id": 77, + "item_id": 240, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "Lungotevere degli Alberteschi, 00153 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479779, + 41.884719 + ] + }, + "properties": { + "id": 78, + "item_id": 241, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884719, 12.479779" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478044, + 41.898268 + ] + }, + "properties": { + "id": 79, + "item_id": 242, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.898268, 12.478044" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495987, + 41.880649 + ] + }, + "properties": { + "id": 80, + "item_id": 243, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.880649, 12.495987" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495933, + 41.880689 + ] + }, + "properties": { + "id": 81, + "item_id": 244, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.880689, 12.495933" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479779, + 41.884719 + ] + }, + "properties": { + "id": 82, + "item_id": 245, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884719, 12.479779" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479772, + 41.884872 + ] + }, + "properties": { + "id": 83, + "item_id": 246, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884872, 12.479772" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.471036, + 41.886153 + ] + }, + "properties": { + "id": 84, + "item_id": 247, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886153, 12.471036" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473115, + 41.885358 + ] + }, + "properties": { + "id": 85, + "item_id": 248, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885358, 12.473115" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.493055, + 41.897199 + ] + }, + "properties": { + "id": 86, + "item_id": 249, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.897199, 12.493055" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.480626, + 41.903044 + ] + }, + "properties": { + "id": 87, + "item_id": 250, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903044, 12.480626" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4836481, + 41.8934821 + ] + }, + "properties": { + "id": 88, + "item_id": 251, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "Scala dell'Arce Capitolina, 12, 00186 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477293, + 41.907839 + ] + }, + "properties": { + "id": 89, + "item_id": 252, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.907839, 12.477293" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.46112, + 41.901372 + ] + }, + "properties": { + "id": 90, + "item_id": 253, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.901372, 12.46112" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.503431, + 41.887276 + ] + }, + "properties": { + "id": 91, + "item_id": 254, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887276, 12.503431" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47678, + 41.88961 + ] + }, + "properties": { + "id": 92, + "item_id": 255, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88961, 12.47678" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48368, + 41.90045 + ] + }, + "properties": { + "id": 93, + "item_id": 256, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90045, 12.48368" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47134, + 41.90007 + ] + }, + "properties": { + "id": 94, + "item_id": 257, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90007, 12.47134" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47112, + 41.88967 + ] + }, + "properties": { + "id": 95, + "item_id": 258, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88967, 12.47112" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48331, + 41.90076 + ] + }, + "properties": { + "id": 96, + "item_id": 259, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90076, 12.48331" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476887, + 41.899485 + ] + }, + "properties": { + "id": 97, + "item_id": 260, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899485, 12.476887" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494369, + 41.890191 + ] + }, + "properties": { + "id": 98, + "item_id": 261, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890191, 12.494369" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4825837, + 41.8935737 + ] + }, + "properties": { + "id": 99, + "item_id": 262, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8935737, 12.4825837" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.505678, + 41.886169 + ] + }, + "properties": { + "id": 100, + "item_id": 263, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886169, 12.505678" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466858, + 41.899873 + ] + }, + "properties": { + "id": 101, + "item_id": 264, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899873, 12.466858" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473031, + 41.895523 + ] + }, + "properties": { + "id": 102, + "item_id": 265, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.895523, 12.473031" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466324, + 41.903247 + ] + }, + "properties": { + "id": 103, + "item_id": 266, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903247, 12.466324" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482699, + 41.893469 + ] + }, + "properties": { + "id": 104, + "item_id": 267, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.893469, 12.482699" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485379, + 41.892454 + ] + }, + "properties": { + "id": 105, + "item_id": 268, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892454, 12.485379" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.45398, + 41.903077 + ] + }, + "properties": { + "id": 106, + "item_id": 269, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903077, 12.45398" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.497533, + 41.889594 + ] + }, + "properties": { + "id": 107, + "item_id": 270, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.889594, 12.497533" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.45398, + 41.903077 + ] + }, + "properties": { + "id": 108, + "item_id": 271, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903077, 12.45398" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487029, + 41.895226 + ] + }, + "properties": { + "id": 109, + "item_id": 272, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.895226, 12.487029" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498194, + 41.898429 + ] + }, + "properties": { + "id": 110, + "item_id": 273, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.898429, 12.498194" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485325, + 41.892662 + ] + }, + "properties": { + "id": 111, + "item_id": 274, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892662, 12.485325" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.491857, + 41.886629 + ] + }, + "properties": { + "id": 112, + "item_id": 275, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886629, 12.491857" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485379, + 41.892454 + ] + }, + "properties": { + "id": 113, + "item_id": 276, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.892454, 12.485379" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482801797821, + 41.893518907561 + ] + }, + "properties": { + "id": 114, + "item_id": 277, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89351890756098, 12.482801797821104" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478674211473, + 41.892786436354 + ] + }, + "properties": { + "id": 115, + "item_id": 278, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892786436354406, 12.478674211473296" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48528208248, + 41.892677915412 + ] + }, + "properties": { + "id": 116, + "item_id": 279, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89267791541243, 12.485282082480264" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476266569145, + 41.892531110028 + ] + }, + "properties": { + "id": 117, + "item_id": 280, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8925311100277, 12.47626656914521" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487007271165, + 41.89513464496 + ] + }, + "properties": { + "id": 118, + "item_id": 281, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89513464495978, 12.487007271164801" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473341696344, + 41.885241540513 + ] + }, + "properties": { + "id": 119, + "item_id": 282, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88524154051263, 12.47334169634412" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487829140151, + 41.893730207033 + ] + }, + "properties": { + "id": 120, + "item_id": 283, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89373020703261, 12.487829140150724" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473200441997, + 41.885373652619 + ] + }, + "properties": { + "id": 121, + "item_id": 284, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88537365261865, 12.47320044199688" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469800768987, + 41.887352990974 + ] + }, + "properties": { + "id": 122, + "item_id": 285, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88735299097397, 12.469800768986659" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469800768987, + 41.887368965328 + ] + }, + "properties": { + "id": 123, + "item_id": 286, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88736896532752, 12.469800768986659" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498546, + 41.897557 + ] + }, + "properties": { + "id": 124, + "item_id": 289, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.897557, 12.498546" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.480055197821, + 41.894545377593 + ] + }, + "properties": { + "id": 125, + "item_id": 290, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89454537759293, 12.480055197821097" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477983, + 41.890783 + ] + }, + "properties": { + "id": 126, + "item_id": 291, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.890783, 12.477983" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487928, + 41.89359 + ] + }, + "properties": { + "id": 127, + "item_id": 292, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.893590, 12.487928" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48667, + 41.895959 + ] + }, + "properties": { + "id": 128, + "item_id": 293, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.895959, 12.486670" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.472867, + 41.900524 + ] + }, + "properties": { + "id": 129, + "item_id": 294, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.900524, 12.472867" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473149997822, + 41.901282137244 + ] + }, + "properties": { + "id": 130, + "item_id": 295, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.901282137243555, 12.473149997822318" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482542061316, + 41.908487466461 + ] + }, + "properties": { + "id": 131, + "item_id": 296, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90848746646136, 12.482542061315895" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483254355492, + 41.894194444419 + ] + }, + "properties": { + "id": 132, + "item_id": 298, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.894194444418765, 12.483254355492441" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461419682481, + 41.888603700412 + ] + }, + "properties": { + "id": 133, + "item_id": 301, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88860370041222, 12.461419682481113" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485100938305, + 41.878855514876 + ] + }, + "properties": { + "id": 134, + "item_id": 302, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8788555148763, 12.485100938304804" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470728637736, + 41.892557835475 + ] + }, + "properties": { + "id": 135, + "item_id": 304, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89255783547505, 12.470728637735547" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470728637736, + 41.892557835475 + ] + }, + "properties": { + "id": 136, + "item_id": 305, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89255783547505, 12.470728637735547" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461481359519, + 41.901528079675 + ] + }, + "properties": { + "id": 137, + "item_id": 306, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90152807967454, 12.461481359518613" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495929982481, + 41.880650097867 + ] + }, + "properties": { + "id": 138, + "item_id": 308, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88065009786724, 12.49592998248082" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494621124811, + 41.885575333712 + ] + }, + "properties": { + "id": 139, + "item_id": 309, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88557533371161, 12.49462112481059" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.471554362811, + 41.899377902131 + ] + }, + "properties": { + "id": 140, + "item_id": 310, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477932426657, + 41.887565680185 + ] + }, + "properties": { + "id": 141, + "item_id": 311, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88756568018467, 12.477932426657022" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494631853646, + 41.885567346311 + ] + }, + "properties": { + "id": 142, + "item_id": 312, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885567346311106, 12.494631853645792" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467599868987, + 41.892391717093 + ] + }, + "properties": { + "id": 143, + "item_id": 313, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89239171709264, 12.467599868986841" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4754483063, + 41.889452938315 + ] + }, + "properties": { + "id": 144, + "item_id": 314, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.88945293831456, 12.475448306300217" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473704611316, + 41.88925901169 + ] + }, + "properties": { + "id": 145, + "item_id": 315, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88925901169028, 12.473704611316352" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.524108513162, + 41.867179746198 + ] + }, + "properties": { + "id": 146, + "item_id": 316, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.86717974619808, 12.524108513162032" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476563068987, + 41.887333642226 + ] + }, + "properties": { + "id": 147, + "item_id": 317, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887333642225876, 12.476563068986671" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.488628040152, + 41.890884967797 + ] + }, + "properties": { + "id": 148, + "item_id": 318, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890884967796964, 12.488628040151585" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479865382481, + 41.892102491006 + ] + }, + "properties": { + "id": 149, + "item_id": 319, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892102491006504, 12.479865382481174" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485133497822, + 41.886321081207 + ] + }, + "properties": { + "id": 150, + "item_id": 320, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88632108120653, 12.485133497821781" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.475608039812, + 41.877324145199 + ] + }, + "properties": { + "id": 151, + "item_id": 321, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.87732414519913, 12.475608039812117" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473406069363, + 41.885153678593 + ] + }, + "properties": { + "id": 152, + "item_id": 322, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885153678593056, 12.47340606936262" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476031068987, + 41.907629933922 + ] + }, + "properties": { + "id": 153, + "item_id": 323, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90762993392159, 12.476031068987332" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.464158297822, + 41.888980686395 + ] + }, + "properties": { + "id": 154, + "item_id": 324, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "41.88898068639497, 12.464158297821875" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494642582481, + 41.88563923288 + ] + }, + "properties": { + "id": 155, + "item_id": 326, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "41.88563923287975, 12.494642582480987" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467286797822, + 41.893723168251 + ] + }, + "properties": { + "id": 156, + "item_id": 327, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89372316825104, 12.467286797822025" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467286797822, + 41.893723168251 + ] + }, + "properties": { + "id": 157, + "item_id": 328, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89372316825104, 12.467286797822025" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466322253646, + 41.88888936067 + ] + }, + "properties": { + "id": 158, + "item_id": 329, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88888936067022, 12.466322253645888" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.450085701258, + 41.917846368856 + ] + }, + "properties": { + "id": 159, + "item_id": 330, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.917846368855585, 12.450085701257574" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.481494913162, + 41.876862086023 + ] + }, + "properties": { + "id": 160, + "item_id": 331, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.876862086022605, 12.481494913162338" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466357, + 41.900659 + ] + }, + "properties": { + "id": 161, + "item_id": 332, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498797726657, + 41.896645808991 + ] + }, + "properties": { + "id": 162, + "item_id": 336, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89664580899126, 12.498797726657342" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48305, + 41.893515 + ] + }, + "properties": { + "id": 163, + "item_id": 337, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8935273643236, 12.482750017140422" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.481633297822, + 41.888214953099 + ] + }, + "properties": { + "id": 164, + "item_id": 338, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.888214953099265, 12.481633297821924" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483134024811, + 41.889692476063 + ] + }, + "properties": { + "id": 165, + "item_id": 339, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.889692476062926, 12.483134024810733" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.523157, + 41.848302 + ] + }, + "properties": { + "id": 166, + "item_id": 340, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.848302, 12.523157" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478022597822, + 41.898256304565 + ] + }, + "properties": { + "id": 167, + "item_id": 341, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89825630456512, 12.478022597822216" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473736797822, + 41.889266998629 + ] + }, + "properties": { + "id": 168, + "item_id": 342, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88926699862922, 12.473736797821946" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.456739026657, + 41.902406141284 + ] + }, + "properties": { + "id": 169, + "item_id": 343, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.902406141284445, 12.456739026656512" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.501519911316, + 41.873656762765 + ] + }, + "properties": { + "id": 170, + "item_id": 344, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.87365676276507, 12.501519911315821" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47764, + 41.883599 + ] + }, + "properties": { + "id": 171, + "item_id": 345, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.493119341998, + 41.897107561691 + ] + }, + "properties": { + "id": 172, + "item_id": 347, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8971075616912, 12.49311934199818" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476542, + 41.887326 + ] + }, + "properties": { + "id": 173, + "item_id": 348, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887326, 12.476542" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473052740152, + 41.899350942919 + ] + }, + "properties": { + "id": 174, + "item_id": 349, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899350942919064, 12.473052740151838" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478674, + 41.89287 + ] + }, + "properties": { + "id": 175, + "item_id": 350, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892870, 12.478674" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482589884327, + 41.893142440884 + ] + }, + "properties": { + "id": 176, + "item_id": 351, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.89314244088442, 12.482589884326694" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461381197822, + 41.901055325001 + ] + }, + "properties": { + "id": 177, + "item_id": 352, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.901055325000776, 12.461381197822313" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.462722197966, + 41.900260110662 + ] + }, + "properties": { + "id": 178, + "item_id": 353, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.90026011066239, 12.462722197965613" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470092, + 41.895641 + ] + }, + "properties": { + "id": 179, + "item_id": 354, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.895641, 12.470092 " + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483972, + 41.893667 + ] + }, + "properties": { + "id": 180, + "item_id": 355, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.893667, 12.483972" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482611, + 41.893306 + ] + }, + "properties": { + "id": 181, + "item_id": 356, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.893306, 12.482611" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.489694, + 41.8905 + ] + }, + "properties": { + "id": 182, + "item_id": 358, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890500, 12.489694" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473773956299, + 41.898726472995 + ] + }, + "properties": { + "id": 183, + "item_id": 361, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469805957908, + 41.89187498377 + ] + }, + "properties": { + "id": 184, + "item_id": 362, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89187498376976, 12.469805957907566" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479297338637, + 41.890110066719 + ] + }, + "properties": { + "id": 185, + "item_id": 363, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89011006671925, 12.479297338636828" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4771113, + 41.889585 + ] + }, + "properties": { + "id": 186, + "item_id": 364, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "Lungotevere degli Alberteschi, 00153 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479779, + 41.884719 + ] + }, + "properties": { + "id": 187, + "item_id": 365, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884719, 12.479779" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478044, + 41.898268 + ] + }, + "properties": { + "id": 188, + "item_id": 366, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.898268, 12.478044" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495987, + 41.880649 + ] + }, + "properties": { + "id": 189, + "item_id": 367, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.880649, 12.495987" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495933, + 41.880689 + ] + }, + "properties": { + "id": 190, + "item_id": 368, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.880689, 12.495933" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479779, + 41.884719 + ] + }, + "properties": { + "id": 191, + "item_id": 369, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884719, 12.479779" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479772, + 41.884872 + ] + }, + "properties": { + "id": 192, + "item_id": 370, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884872, 12.479772" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.471036, + 41.886153 + ] + }, + "properties": { + "id": 193, + "item_id": 371, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886153, 12.471036" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473115, + 41.885358 + ] + }, + "properties": { + "id": 194, + "item_id": 372, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885358, 12.473115" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.493055, + 41.897199 + ] + }, + "properties": { + "id": 195, + "item_id": 373, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.897199, 12.493055" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.480626, + 41.903044 + ] + }, + "properties": { + "id": 196, + "item_id": 374, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903044, 12.480626" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4836481, + 41.8934821 + ] + }, + "properties": { + "id": 197, + "item_id": 375, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "Scala dell'Arce Capitolina, 12, 00186 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477293, + 41.907839 + ] + }, + "properties": { + "id": 198, + "item_id": 376, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.907839, 12.477293" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.46112, + 41.901372 + ] + }, + "properties": { + "id": 199, + "item_id": 377, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.901372, 12.46112" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.503431, + 41.887276 + ] + }, + "properties": { + "id": 200, + "item_id": 378, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887276, 12.503431" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47678, + 41.88961 + ] + }, + "properties": { + "id": 201, + "item_id": 379, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88961, 12.47678" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48368, + 41.90045 + ] + }, + "properties": { + "id": 202, + "item_id": 380, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90045, 12.48368" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47134, + 41.90007 + ] + }, + "properties": { + "id": 203, + "item_id": 381, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90007, 12.47134" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47112, + 41.88967 + ] + }, + "properties": { + "id": 204, + "item_id": 382, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88967, 12.47112" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48331, + 41.90076 + ] + }, + "properties": { + "id": 205, + "item_id": 383, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90076, 12.48331" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476887, + 41.899485 + ] + }, + "properties": { + "id": 206, + "item_id": 384, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899485, 12.476887" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494369, + 41.890191 + ] + }, + "properties": { + "id": 207, + "item_id": 385, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890191, 12.494369" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4825837, + 41.8935737 + ] + }, + "properties": { + "id": 208, + "item_id": 386, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8935737, 12.4825837" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.505678, + 41.886169 + ] + }, + "properties": { + "id": 209, + "item_id": 387, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886169, 12.505678" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466858, + 41.899873 + ] + }, + "properties": { + "id": 210, + "item_id": 388, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899873, 12.466858" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473031, + 41.895523 + ] + }, + "properties": { + "id": 211, + "item_id": 389, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.895523, 12.473031" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466324, + 41.903247 + ] + }, + "properties": { + "id": 212, + "item_id": 390, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903247, 12.466324" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482699, + 41.893469 + ] + }, + "properties": { + "id": 213, + "item_id": 391, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.893469, 12.482699" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485379, + 41.892454 + ] + }, + "properties": { + "id": 214, + "item_id": 392, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892454, 12.485379" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.45398, + 41.903077 + ] + }, + "properties": { + "id": 215, + "item_id": 393, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903077, 12.45398" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.497533, + 41.889594 + ] + }, + "properties": { + "id": 216, + "item_id": 394, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.889594, 12.497533" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.45398, + 41.903077 + ] + }, + "properties": { + "id": 217, + "item_id": 395, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903077, 12.45398" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487029, + 41.895226 + ] + }, + "properties": { + "id": 218, + "item_id": 396, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.895226, 12.487029" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498194, + 41.898429 + ] + }, + "properties": { + "id": 219, + "item_id": 397, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.898429, 12.498194" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485325, + 41.892662 + ] + }, + "properties": { + "id": 220, + "item_id": 398, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892662, 12.485325" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.491857, + 41.886629 + ] + }, + "properties": { + "id": 221, + "item_id": 399, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886629, 12.491857" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485379, + 41.892454 + ] + }, + "properties": { + "id": 222, + "item_id": 400, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.892454, 12.485379" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482801797821, + 41.893518907561 + ] + }, + "properties": { + "id": 223, + "item_id": 401, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89351890756098, 12.482801797821104" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478674211473, + 41.892786436354 + ] + }, + "properties": { + "id": 224, + "item_id": 402, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892786436354406, 12.478674211473296" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48528208248, + 41.892677915412 + ] + }, + "properties": { + "id": 225, + "item_id": 403, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89267791541243, 12.485282082480264" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476266569145, + 41.892531110028 + ] + }, + "properties": { + "id": 226, + "item_id": 404, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8925311100277, 12.47626656914521" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487007271165, + 41.89513464496 + ] + }, + "properties": { + "id": 227, + "item_id": 405, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89513464495978, 12.487007271164801" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473341696344, + 41.885241540513 + ] + }, + "properties": { + "id": 228, + "item_id": 406, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88524154051263, 12.47334169634412" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487829140151, + 41.893730207033 + ] + }, + "properties": { + "id": 229, + "item_id": 407, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89373020703261, 12.487829140150724" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473200441997, + 41.885373652619 + ] + }, + "properties": { + "id": 230, + "item_id": 408, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88537365261865, 12.47320044199688" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469800768987, + 41.887352990974 + ] + }, + "properties": { + "id": 231, + "item_id": 409, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88735299097397, 12.469800768986659" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469800768987, + 41.887368965328 + ] + }, + "properties": { + "id": 232, + "item_id": 410, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88736896532752, 12.469800768986659" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498546, + 41.897557 + ] + }, + "properties": { + "id": 233, + "item_id": 411, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.897557, 12.498546" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.480055197821, + 41.894545377593 + ] + }, + "properties": { + "id": 234, + "item_id": 412, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89454537759293, 12.480055197821097" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477983, + 41.890783 + ] + }, + "properties": { + "id": 235, + "item_id": 413, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.890783, 12.477983" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487928, + 41.89359 + ] + }, + "properties": { + "id": 236, + "item_id": 414, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.893590, 12.487928" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48667, + 41.895959 + ] + }, + "properties": { + "id": 237, + "item_id": 415, + "zoom_level": 5, + "map_type": "Leaflet", + "address": "41.895959, 12.486670" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.472867, + 41.900524 + ] + }, + "properties": { + "id": 238, + "item_id": 416, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.900524, 12.472867" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473149997822, + 41.901282137244 + ] + }, + "properties": { + "id": 239, + "item_id": 417, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.901282137243555, 12.473149997822318" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482542061316, + 41.908487466461 + ] + }, + "properties": { + "id": 240, + "item_id": 418, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90848746646136, 12.482542061315895" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483254355492, + 41.894194444419 + ] + }, + "properties": { + "id": 241, + "item_id": 420, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.894194444418765, 12.483254355492441" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461419682481, + 41.888603700412 + ] + }, + "properties": { + "id": 242, + "item_id": 423, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88860370041222, 12.461419682481113" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485100938305, + 41.878855514876 + ] + }, + "properties": { + "id": 243, + "item_id": 424, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8788555148763, 12.485100938304804" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470728637736, + 41.892557835475 + ] + }, + "properties": { + "id": 244, + "item_id": 426, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89255783547505, 12.470728637735547" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470728637736, + 41.892557835475 + ] + }, + "properties": { + "id": 245, + "item_id": 427, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89255783547505, 12.470728637735547" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461481359519, + 41.901528079675 + ] + }, + "properties": { + "id": 246, + "item_id": 428, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90152807967454, 12.461481359518613" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495929982481, + 41.880650097867 + ] + }, + "properties": { + "id": 247, + "item_id": 430, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88065009786724, 12.49592998248082" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494621124811, + 41.885575333712 + ] + }, + "properties": { + "id": 248, + "item_id": 431, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88557533371161, 12.49462112481059" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.471554362811, + 41.899377902131 + ] + }, + "properties": { + "id": 249, + "item_id": 432, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477932426657, + 41.887565680185 + ] + }, + "properties": { + "id": 250, + "item_id": 433, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88756568018467, 12.477932426657022" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494631853646, + 41.885567346311 + ] + }, + "properties": { + "id": 251, + "item_id": 434, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885567346311106, 12.494631853645792" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467599868987, + 41.892391717093 + ] + }, + "properties": { + "id": 252, + "item_id": 435, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89239171709264, 12.467599868986841" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4754483063, + 41.889452938315 + ] + }, + "properties": { + "id": 253, + "item_id": 436, + "zoom_level": 18, + "map_type": "Leaflet", + "address": "41.88945293831456, 12.475448306300217" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473704611316, + 41.88925901169 + ] + }, + "properties": { + "id": 254, + "item_id": 437, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88925901169028, 12.473704611316352" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.524108513162, + 41.867179746198 + ] + }, + "properties": { + "id": 255, + "item_id": 438, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.86717974619808, 12.524108513162032" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476563068987, + 41.887333642226 + ] + }, + "properties": { + "id": 256, + "item_id": 439, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887333642225876, 12.476563068986671" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.488628040152, + 41.890884967797 + ] + }, + "properties": { + "id": 257, + "item_id": 440, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890884967796964, 12.488628040151585" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479865382481, + 41.892102491006 + ] + }, + "properties": { + "id": 258, + "item_id": 441, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892102491006504, 12.479865382481174" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485133497822, + 41.886321081207 + ] + }, + "properties": { + "id": 259, + "item_id": 442, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88632108120653, 12.485133497821781" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.475608039812, + 41.877324145199 + ] + }, + "properties": { + "id": 260, + "item_id": 443, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.87732414519913, 12.475608039812117" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473406069363, + 41.885153678593 + ] + }, + "properties": { + "id": 261, + "item_id": 444, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885153678593056, 12.47340606936262" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476031068987, + 41.907629933922 + ] + }, + "properties": { + "id": 262, + "item_id": 445, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90762993392159, 12.476031068987332" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.464158297822, + 41.888980686395 + ] + }, + "properties": { + "id": 263, + "item_id": 446, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "41.88898068639497, 12.464158297821875" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494642582481, + 41.88563923288 + ] + }, + "properties": { + "id": 264, + "item_id": 448, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "41.88563923287975, 12.494642582480987" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467286797822, + 41.893723168251 + ] + }, + "properties": { + "id": 265, + "item_id": 449, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89372316825104, 12.467286797822025" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.467286797822, + 41.893723168251 + ] + }, + "properties": { + "id": 266, + "item_id": 450, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89372316825104, 12.467286797822025" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466322253646, + 41.88888936067 + ] + }, + "properties": { + "id": 267, + "item_id": 451, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88888936067022, 12.466322253645888" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.450085701258, + 41.917846368856 + ] + }, + "properties": { + "id": 268, + "item_id": 452, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.917846368855585, 12.450085701257574" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.481494913162, + 41.876862086023 + ] + }, + "properties": { + "id": 269, + "item_id": 453, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.876862086022605, 12.481494913162338" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466357, + 41.900659 + ] + }, + "properties": { + "id": 270, + "item_id": 454, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498797726657, + 41.896645808991 + ] + }, + "properties": { + "id": 271, + "item_id": 458, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89664580899126, 12.498797726657342" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48305, + 41.893515 + ] + }, + "properties": { + "id": 272, + "item_id": 459, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8935273643236, 12.482750017140422" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.481633297822, + 41.888214953099 + ] + }, + "properties": { + "id": 273, + "item_id": 460, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.888214953099265, 12.481633297821924" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483134024811, + 41.889692476063 + ] + }, + "properties": { + "id": 274, + "item_id": 461, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.889692476062926, 12.483134024810733" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.523157, + 41.848302 + ] + }, + "properties": { + "id": 275, + "item_id": 462, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.848302, 12.523157" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478022597822, + 41.898256304565 + ] + }, + "properties": { + "id": 276, + "item_id": 463, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89825630456512, 12.478022597822216" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473736797822, + 41.889266998629 + ] + }, + "properties": { + "id": 277, + "item_id": 464, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88926699862922, 12.473736797821946" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.456739026657, + 41.902406141284 + ] + }, + "properties": { + "id": 278, + "item_id": 465, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.902406141284445, 12.456739026656512" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.501519911316, + 41.873656762765 + ] + }, + "properties": { + "id": 279, + "item_id": 466, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.87365676276507, 12.501519911315821" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47764, + 41.883599 + ] + }, + "properties": { + "id": 280, + "item_id": 467, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.493119341998, + 41.897107561691 + ] + }, + "properties": { + "id": 281, + "item_id": 469, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8971075616912, 12.49311934199818" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476542, + 41.887326 + ] + }, + "properties": { + "id": 282, + "item_id": 470, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887326, 12.476542" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473052740152, + 41.899350942919 + ] + }, + "properties": { + "id": 283, + "item_id": 471, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899350942919064, 12.473052740151838" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478674, + 41.89287 + ] + }, + "properties": { + "id": 284, + "item_id": 472, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892870, 12.478674" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482589884327, + 41.893142440884 + ] + }, + "properties": { + "id": 285, + "item_id": 473, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.89314244088442, 12.482589884326694" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.461381197822, + 41.901055325001 + ] + }, + "properties": { + "id": 286, + "item_id": 474, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.901055325000776, 12.461381197822313" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.462722197966, + 41.900260110662 + ] + }, + "properties": { + "id": 287, + "item_id": 475, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.90026011066239, 12.462722197965613" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.470092, + 41.895641 + ] + }, + "properties": { + "id": 288, + "item_id": 476, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.895641, 12.470092 " + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.483972, + 41.893667 + ] + }, + "properties": { + "id": 289, + "item_id": 477, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.893667, 12.483972" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482611, + 41.893306 + ] + }, + "properties": { + "id": 290, + "item_id": 478, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "41.893306, 12.482611" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.489694, + 41.8905 + ] + }, + "properties": { + "id": 291, + "item_id": 480, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890500, 12.489694" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478221754154308, + 41.891069599999994 + ] + }, + "properties": { + "id": 292, + "item_id": 483, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "Ponte Fabricio, 00186, Rome" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469805957908, + 41.89187498377 + ] + }, + "properties": { + "id": 293, + "item_id": 484, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89187498376976, 12.469805957907566" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479297338637, + 41.890110066719 + ] + }, + "properties": { + "id": 294, + "item_id": 485, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89011006671925, 12.479297338636828" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4771113, + 41.889585 + ] + }, + "properties": { + "id": 295, + "item_id": 486, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "Lungotevere degli Alberteschi, 00153 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479779, + 41.884719 + ] + }, + "properties": { + "id": 296, + "item_id": 487, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884719, 12.479779" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478044, + 41.898268 + ] + }, + "properties": { + "id": 297, + "item_id": 488, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.898268, 12.478044" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495987, + 41.880649 + ] + }, + "properties": { + "id": 298, + "item_id": 489, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.880649, 12.495987" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.495933, + 41.880689 + ] + }, + "properties": { + "id": 299, + "item_id": 490, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.880689, 12.495933" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479779, + 41.884719 + ] + }, + "properties": { + "id": 300, + "item_id": 491, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884719, 12.479779" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.479772, + 41.884872 + ] + }, + "properties": { + "id": 301, + "item_id": 492, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.884872, 12.479772" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.471036, + 41.886153 + ] + }, + "properties": { + "id": 302, + "item_id": 493, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886153, 12.471036" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473115, + 41.885358 + ] + }, + "properties": { + "id": 303, + "item_id": 494, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.885358, 12.473115" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.493055, + 41.897199 + ] + }, + "properties": { + "id": 304, + "item_id": 495, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.897199, 12.493055" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.480626, + 41.903044 + ] + }, + "properties": { + "id": 305, + "item_id": 496, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903044, 12.480626" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4836481, + 41.8934821 + ] + }, + "properties": { + "id": 306, + "item_id": 497, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "Scala dell'Arce Capitolina, 12, 00186 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.477293, + 41.907839 + ] + }, + "properties": { + "id": 307, + "item_id": 498, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.907839, 12.477293" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.46112, + 41.901372 + ] + }, + "properties": { + "id": 308, + "item_id": 499, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.901372, 12.46112" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.503431, + 41.887276 + ] + }, + "properties": { + "id": 309, + "item_id": 500, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.887276, 12.503431" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47678, + 41.88961 + ] + }, + "properties": { + "id": 310, + "item_id": 501, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88961, 12.47678" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48368, + 41.90045 + ] + }, + "properties": { + "id": 311, + "item_id": 502, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90045, 12.48368" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47134, + 41.90007 + ] + }, + "properties": { + "id": 312, + "item_id": 503, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90007, 12.47134" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.47112, + 41.88967 + ] + }, + "properties": { + "id": 313, + "item_id": 504, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88967, 12.47112" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48331, + 41.90076 + ] + }, + "properties": { + "id": 314, + "item_id": 505, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.90076, 12.48331" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476887, + 41.899485 + ] + }, + "properties": { + "id": 315, + "item_id": 506, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899485, 12.476887" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.494369, + 41.890191 + ] + }, + "properties": { + "id": 316, + "item_id": 507, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.890191, 12.494369" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4825837, + 41.8935737 + ] + }, + "properties": { + "id": 317, + "item_id": 508, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8935737, 12.4825837" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.505678, + 41.886169 + ] + }, + "properties": { + "id": 318, + "item_id": 509, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886169, 12.505678" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466858, + 41.899873 + ] + }, + "properties": { + "id": 319, + "item_id": 510, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.899873, 12.466858" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473031, + 41.895523 + ] + }, + "properties": { + "id": 320, + "item_id": 511, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.895523, 12.473031" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.466324, + 41.903247 + ] + }, + "properties": { + "id": 321, + "item_id": 512, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.903247, 12.466324" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482699, + 41.893469 + ] + }, + "properties": { + "id": 322, + "item_id": 513, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.893469, 12.482699" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485379, + 41.892454 + ] + }, + "properties": { + "id": 323, + "item_id": 514, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892454, 12.485379" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.455137968063354, + 41.90220018229139 + ] + }, + "properties": { + "id": 324, + "item_id": 515, + "zoom_level": 16, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.497533, + 41.889594 + ] + }, + "properties": { + "id": 325, + "item_id": 516, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.889594, 12.497533" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.457423210144043, + 41.90228901893026 + ] + }, + "properties": { + "id": 326, + "item_id": 517, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487029, + 41.895226 + ] + }, + "properties": { + "id": 327, + "item_id": 518, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.895226, 12.487029" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.498194, + 41.898429 + ] + }, + "properties": { + "id": 328, + "item_id": 519, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.898429, 12.498194" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485325, + 41.892662 + ] + }, + "properties": { + "id": 329, + "item_id": 520, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892662, 12.485325" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.491857, + 41.886629 + ] + }, + "properties": { + "id": 330, + "item_id": 521, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.886629, 12.491857" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.485379, + 41.892454 + ] + }, + "properties": { + "id": 331, + "item_id": 522, + "zoom_level": 17, + "map_type": "Leaflet", + "address": "41.892454, 12.485379" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.482801797821, + 41.893518907561 + ] + }, + "properties": { + "id": 332, + "item_id": 523, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89351890756098, 12.482801797821104" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.478674211473, + 41.892786436354 + ] + }, + "properties": { + "id": 333, + "item_id": 524, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.892786436354406, 12.478674211473296" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.48528208248, + 41.892677915412 + ] + }, + "properties": { + "id": 334, + "item_id": 525, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89267791541243, 12.485282082480264" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.476266569145, + 41.892531110028 + ] + }, + "properties": { + "id": 335, + "item_id": 526, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.8925311100277, 12.47626656914521" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487007271165, + 41.89513464496 + ] + }, + "properties": { + "id": 336, + "item_id": 527, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89513464495978, 12.487007271164801" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473341696344, + 41.885241540513 + ] + }, + "properties": { + "id": 337, + "item_id": 528, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88524154051263, 12.47334169634412" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.487829140151, + 41.893730207033 + ] + }, + "properties": { + "id": 338, + "item_id": 529, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.89373020703261, 12.487829140150724" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.473200441997, + 41.885373652619 + ] + }, + "properties": { + "id": 339, + "item_id": 530, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88537365261865, 12.47320044199688" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469800768987, + 41.887352990974 + ] + }, + "properties": { + "id": 340, + "item_id": 531, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88735299097397, 12.469800768986659" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469800768987, + 41.887368965328 + ] + }, + "properties": { + "id": 341, + "item_id": 532, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41.88736896532752, 12.469800768986659" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4713595, + 41.9000664 + ] + }, + "properties": { + "id": 342, + "item_id": 456, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Arco della Pace 10/11, Rome" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4939594, + 41.889521 + ] + }, + "properties": { + "id": 343, + "item_id": 447, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Via dei SS. Quattro, 20, 00184 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4665819, + 41.9004777 + ] + }, + "properties": { + "id": 344, + "item_id": 455, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Via del Banco di Santo Spirito, 60/ 61, 00186 Roma RM" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.469286055275456, + 41.88709745 + ] + }, + "properties": { + "id": 345, + "item_id": 429, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Piazza di S. Cosimato, 10, 00153 Roma RM" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4764574, + 41.8865243 + ] + }, + "properties": { + "id": 346, + "item_id": 421, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Via di S. Michele, 00153 Roma RM" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4755402, + 41.9048691 + ] + }, + "properties": { + "id": 347, + "item_id": 422, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Via Tomacelli, 132, 00186 Roma RM" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4676289, + 41.8921993 + ] + }, + "properties": { + "id": 348, + "item_id": 425, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Via di Porta Settimiana, 00165 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.4806725, + 41.8867901 + ] + }, + "properties": { + "id": 349, + "item_id": 468, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Clivo di Rocca Savella, 10, 00153 Roma RM" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.463969911440824, + 41.90154125 + ] + }, + "properties": { + "id": 350, + "item_id": 479, + "zoom_level": 14, + "map_type": "Leaflet", + "address": "41\u00b054'07.3\"N 12\u00b027'52.9\"E" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.5063717, + 41.8178036 + ] + }, + "properties": { + "id": 351, + "item_id": 481, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Vicolo della Cecchignoletta, 14, 00143 Roma RM, Italy" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 12.457709832382092, + 41.90043215 + ] + }, + "properties": { + "id": 352, + "item_id": 482, + "zoom_level": 15, + "map_type": "Leaflet", + "address": "Via Paolo VI, 25, 00193 Roma RM" + } + } + ] +} diff --git a/views/public/javascripts/omeka-locations-to-geojson.js b/views/public/javascripts/omeka-locations-to-geojson.js new file mode 100644 index 0000000..e7f57d6 --- /dev/null +++ b/views/public/javascripts/omeka-locations-to-geojson.js @@ -0,0 +1,48 @@ +const fs = require('fs'); +const path = require('path'); + +const pluginRoot = path.join(__dirname, '..', '..', '..'); +const inputPath = path.join(pluginRoot, 'omeka_locations.json'); +const outputPath = path.join(pluginRoot, 'views', 'public', 'data', 'omeka-locations.geojson'); + +const exportRows = JSON.parse(fs.readFileSync(inputPath, 'utf8')); +const locationsTable = exportRows.find((row) => row.type === 'table' && row.name === 'omeka_locations'); + +if (!locationsTable || !Array.isArray(locationsTable.data)) { + throw new Error('Could not find omeka_locations table data in export.'); +} + +const features = locationsTable.data + .map((row) => { + const latitude = Number(row.latitude); + const longitude = Number(row.longitude); + + if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) { + return null; + } + + return { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [longitude, latitude] + }, + properties: { + id: Number(row.id), + item_id: Number(row.item_id), + zoom_level: Number(row.zoom_level), + map_type: row.map_type, + address: row.address || '' + } + }; + }) + .filter(Boolean); + +const geojson = { + type: 'FeatureCollection', + name: 'omeka_locations', + features +}; + +fs.writeFileSync(outputPath, `${JSON.stringify(geojson, null, 2)}\n`); +console.log(`Wrote ${features.length} features to ${outputPath}`); \ No newline at end of file diff --git a/views/public/javascripts/omeka-locations-to-geojson.php b/views/public/javascripts/omeka-locations-to-geojson.php new file mode 100644 index 0000000..64aeb31 --- /dev/null +++ b/views/public/javascripts/omeka-locations-to-geojson.php @@ -0,0 +1,79 @@ + 'Feature', + 'geometry' => array( + 'type' => 'Point', + 'coordinates' => array($longitude, $latitude), + ), + 'properties' => array( + 'id' => isset($row['id']) ? (int) $row['id'] : null, + 'item_id' => isset($row['item_id']) ? (int) $row['item_id'] : null, + 'zoom_level' => isset($row['zoom_level']) ? (int) $row['zoom_level'] : null, + 'map_type' => isset($row['map_type']) ? $row['map_type'] : '', + 'address' => isset($row['address']) ? $row['address'] : '', + ), + ); +} + +$geojson = array( + 'type' => 'FeatureCollection', + 'name' => 'omeka_locations', + 'features' => $features, +); + +if (!is_dir($outputDir)) { + mkdir($outputDir, 0775, true); +} + +file_put_contents( + $outputPath, + json_encode($geojson, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n" +); + +echo 'Wrote ' . count($features) . " features to $outputPath\n"; \ No newline at end of file diff --git a/views/public/javascripts/walking-tour.js b/views/public/javascripts/walking-tour.js index aeb9602..537d262 100755 --- a/views/public/javascripts/walking-tour.js +++ b/views/public/javascripts/walking-tour.js @@ -245,7 +245,7 @@ return new Iiif(url, options); const getPackages = async function() { const allmapsAnnotation = await import("https://unpkg.com/@allmaps/annotation?module") - const allmapsTransform = await import("https://unpkg.com/@allmaps/transform@1.0.0-beta.37/dist/bundled/index.es.js?module") + const allmapsTransform = await import("https://unpkg.com/@allmaps/transform?module") return [allmapsAnnotation, allmapsTransform] } @@ -281,6 +281,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { var MAP_URL_TEMPLATE = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}'; const annotationUrl = 'https://annotations.allmaps.org/manifests/47574ee029cca631' + const omekaLocationsGeojsonUrl = 'plugins/WalkingTour/views/public/data/omeka-locations.geojson' // const annotationUrl = "https://annotations.allmaps.org/manifests/c047e9dd35f2d377" var MAP_CENTER; @@ -562,10 +563,11 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { }) .then(data => { const maps = allmapsAnnotation.parseAnnotation(data) - const transformer = new allmapsTransform.GcpTransformer(maps[0].gcps); + const transformer = createGcpTransformer(maps[0]); console.log(maps) imageZoom = maps[0].resource.height / $('#map').height() mapSetUp(maps[0]) + loadOmekaLocationsGeojson(transformer); doQuery(transformer, maps); }) .catch(error => { @@ -575,6 +577,89 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { // Retain previous form state, if needed. retainFormState(); + function createGcpTransformer(georeferencedMap) { + if (allmapsTransform.GcpTransformer.fromGeoreferencedMap) { + return allmapsTransform.GcpTransformer.fromGeoreferencedMap(georeferencedMap); + } + + return new allmapsTransform.GcpTransformer( + georeferencedMap.gcps, + georeferencedMap.transformation && georeferencedMap.transformation.type + ); + } + + function transformGeoPointToImagePoint(transformer, coordinates) { + var point; + + if (transformer.transformToResource) { + point = transformer.transformToResource(coordinates); + } else if (transformer.transformBackward) { + point = transformer.transformBackward(coordinates); + } else { + throw new Error('Allmaps transformer does not support geo-to-resource transforms.'); + } + + return point.map(function (value) { + return value / imageZoom; + }); + } + + function imagePointToLatLng(point) { + return xy(point[0], point[1]); + } + + function loadOmekaLocationsGeojson(transformer) { + fetch(omekaLocationsGeojsonUrl) + .then(function (response) { + if (!response.ok) { + throw new Error('Could not load Omeka locations GeoJSON.'); + } + return response.json(); + }) + .then(function (geojson) { + var transformedFeatures = geojson.features.map(function (feature) { + var imagePoint = transformGeoPointToImagePoint(transformer, feature.geometry.coordinates); + + return { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: imagePoint + }, + properties: feature.properties + }; + }); + + L.geoJson({ + type: 'FeatureCollection', + features: transformedFeatures + }, { + pointToLayer: function (feature) { + var popupContent = 'Item ' + feature.properties.item_id + ''; + + if (feature.properties.address) { + popupContent += '
' + feature.properties.address; + } + + var marker = L.circleMarker(imagePointToLatLng(feature.geometry.coordinates), { + radius: 5, + color: '#1f2937', + weight: 1, + fillColor: '#f59e0b', + fillOpacity: 0.85 + }); + + marker.bindPopup(popupContent); + return marker; + } + }).addTo(map); + + console.log('Loaded Omeka locations GeoJSON', transformedFeatures.length); + }) + .catch(function (error) { + console.error('Omeka locations GeoJSON error:', error); + }); + } /* * Setup map layer @@ -784,15 +869,15 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { newList = [] response.features = response.features.map(ele => { - var test = transformer.transformBackward( - ele.geometry - ) - test = test.map(ele => {return ele/imageZoom}) + var test = transformGeoPointToImagePoint(transformer, ele.geometry.coordinates) // console.log(test) itemIDList.push(ele.properties.id) return({ ...ele, - geometry: test + geometry: { + ...ele.geometry, + coordinates: test + } }) }) console.log(response.features) @@ -809,7 +894,7 @@ function walkingTourJs(allmapsAnnotation, allmapsTransform, iiif) { }); numMarker++; - var marker = L.marker(xy(feature.geometry[0], feature.geometry[1]), { icon: numberIcon }); + var marker = L.marker(imagePointToLatLng(feature.geometry.coordinates), { icon: numberIcon }); marker.on('click', function (e) { // center click location map.flyTo(e.latlng, 4); From 01bf8490178124fc31052ad624436e4176874ce1 Mon Sep 17 00:00:00 2001 From: zhouk2 Date: Mon, 25 May 2026 19:25:41 -0500 Subject: [PATCH 11/11] locationjson --- omeka_locations.json | 360 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 360 insertions(+) create mode 100644 omeka_locations.json diff --git a/omeka_locations.json b/omeka_locations.json new file mode 100644 index 0000000..781a2d8 --- /dev/null +++ b/omeka_locations.json @@ -0,0 +1,360 @@ +[ + {"type":"header","version":"5.1.3","comment":"Export to JSON plugin for PHPMyAdmin"}, + {"type":"database","name":"omeka_cgmr_dev"}, + {"type":"table","name":"omeka_locations","database":"omeka_cgmr_dev","data": + [ + {"id":"1","item_id":"8","latitude":"41.900524","longitude":"12.472867","zoom_level":"18","map_type":"Leaflet","address":"41.900524, 12.472867"}, + {"id":"2","item_id":"5","latitude":"41.89359","longitude":"12.487928","zoom_level":"5","map_type":"Leaflet","address":"41.893590, 12.487928"}, + {"id":"3","item_id":"6","latitude":"41.895959","longitude":"12.48667","zoom_level":"5","map_type":"Leaflet","address":"41.895959, 12.486670"}, + {"id":"4","item_id":"1","latitude":"41.897557","longitude":"12.498546","zoom_level":"5","map_type":"Leaflet","address":"41.897557, 12.498546"}, + {"id":"5","item_id":"4","latitude":"41.890783","longitude":"12.477983","zoom_level":"5","map_type":"Leaflet","address":"41.890783, 12.477983"}, + {"id":"6","item_id":"7","latitude":"41.899174","longitude":"12.472214","zoom_level":"5","map_type":"Leaflet","address":"41.899174, 12.472214"}, + {"id":"7","item_id":"3","latitude":"41.894203","longitude":"12.480039","zoom_level":"17","map_type":"Leaflet","address":"41.894203, 12.480039"}, + {"id":"8","item_id":"153","latitude":"41.9001702","longitude":"12.4698422","zoom_level":"14","map_type":"Leaflet","address":"41.9001702, 12.4698422"}, + {"id":"10","item_id":"154","latitude":"41.9001702","longitude":"12.4698422","zoom_level":"14","map_type":"Leaflet","address":"41.9001702, 12.4698422"}, + {"id":"11","item_id":"155","latitude":"41.890469399832","longitude":"12.49272108078","zoom_level":"16","map_type":"Leaflet","address":""}, + {"id":"12","item_id":"156","latitude":"41.8986","longitude":"12.4769","zoom_level":"14","map_type":"Leaflet","address":"41.8986, 12.4769"}, + {"id":"13","item_id":"157","latitude":"41.8902","longitude":"12.4922","zoom_level":"14","map_type":"Leaflet","address":"41.8902, 12.4922"}, + {"id":"14","item_id":"158","latitude":"41.9025577839289","longitude":"12.4769772669522","zoom_level":"18","map_type":"Leaflet","address":"41.90255778392887, 12.476977266952224"}, + {"id":"15","item_id":"165","latitude":"41.897557","longitude":"12.498546","zoom_level":"16","map_type":"Leaflet","address":"41.897557, 12.498546"}, + {"id":"16","item_id":"166","latitude":"41.894545377593","longitude":"12.480055197821","zoom_level":"14","map_type":"Leaflet","address":"41.89454537759293, 12.480055197821097"}, + {"id":"17","item_id":"167","latitude":"41.890783","longitude":"12.477983","zoom_level":"5","map_type":"Leaflet","address":"41.890783, 12.477983"}, + {"id":"18","item_id":"168","latitude":"41.89359","longitude":"12.487928","zoom_level":"17","map_type":"Leaflet","address":"41.893590, 12.487928"}, + {"id":"19","item_id":"169","latitude":"41.895959","longitude":"12.48667","zoom_level":"5","map_type":"Leaflet","address":"41.895959, 12.486670"}, + {"id":"20","item_id":"170","latitude":"41.900524","longitude":"12.472867","zoom_level":"18","map_type":"Leaflet","address":"41.900524, 12.472867"}, + {"id":"21","item_id":"171","latitude":"41.901282137244","longitude":"12.473149997822","zoom_level":"14","map_type":"Leaflet","address":"41.901282137243555, 12.473149997822318"}, + {"id":"22","item_id":"172","latitude":"41.908487466461","longitude":"12.482542061316","zoom_level":"14","map_type":"Leaflet","address":"41.90848746646136, 12.482542061315895"}, + {"id":"23","item_id":"174","latitude":"41.894194444419","longitude":"12.483254355492","zoom_level":"14","map_type":"Leaflet","address":"41.894194444418765, 12.483254355492441"}, + {"id":"24","item_id":"177","latitude":"41.888603700412","longitude":"12.461419682481","zoom_level":"14","map_type":"Leaflet","address":"41.88860370041222, 12.461419682481113"}, + {"id":"25","item_id":"178","latitude":"41.878855514876","longitude":"12.485100938305","zoom_level":"14","map_type":"Leaflet","address":"41.8788555148763, 12.485100938304804"}, + {"id":"26","item_id":"180","latitude":"41.892557835475","longitude":"12.470728637736","zoom_level":"14","map_type":"Leaflet","address":"41.89255783547505, 12.470728637735547"}, + {"id":"27","item_id":"181","latitude":"41.892557835475","longitude":"12.470728637736","zoom_level":"14","map_type":"Leaflet","address":"41.89255783547505, 12.470728637735547"}, + {"id":"28","item_id":"182","latitude":"41.901528079675","longitude":"12.461481359519","zoom_level":"14","map_type":"Leaflet","address":"41.90152807967454, 12.461481359518613"}, + {"id":"29","item_id":"184","latitude":"41.880650097867","longitude":"12.495929982481","zoom_level":"14","map_type":"Leaflet","address":"41.88065009786724, 12.49592998248082"}, + {"id":"30","item_id":"185","latitude":"41.885575333712","longitude":"12.494621124811","zoom_level":"14","map_type":"Leaflet","address":"41.88557533371161, 12.49462112481059"}, + {"id":"31","item_id":"186","latitude":"41.899377902131","longitude":"12.471554362811","zoom_level":"18","map_type":"Leaflet","address":""}, + {"id":"32","item_id":"187","latitude":"41.887565680185","longitude":"12.477932426657","zoom_level":"14","map_type":"Leaflet","address":"41.88756568018467, 12.477932426657022"}, + {"id":"33","item_id":"188","latitude":"41.885567346311","longitude":"12.494631853646","zoom_level":"14","map_type":"Leaflet","address":"41.885567346311106, 12.494631853645792"}, + {"id":"34","item_id":"189","latitude":"41.892391717093","longitude":"12.467599868987","zoom_level":"14","map_type":"Leaflet","address":"41.89239171709264, 12.467599868986841"}, + {"id":"35","item_id":"190","latitude":"41.889452938315","longitude":"12.4754483063","zoom_level":"18","map_type":"Leaflet","address":"41.88945293831456, 12.475448306300217"}, + {"id":"36","item_id":"191","latitude":"41.88925901169","longitude":"12.473704611316","zoom_level":"14","map_type":"Leaflet","address":"41.88925901169028, 12.473704611316352"}, + {"id":"37","item_id":"192","latitude":"41.867179746198","longitude":"12.524108513162","zoom_level":"14","map_type":"Leaflet","address":"41.86717974619808, 12.524108513162032"}, + {"id":"38","item_id":"193","latitude":"41.887333642226","longitude":"12.476563068987","zoom_level":"14","map_type":"Leaflet","address":"41.887333642225876, 12.476563068986671"}, + {"id":"39","item_id":"194","latitude":"41.890884967797","longitude":"12.488628040152","zoom_level":"14","map_type":"Leaflet","address":"41.890884967796964, 12.488628040151585"}, + {"id":"40","item_id":"195","latitude":"41.892102491006","longitude":"12.479865382481","zoom_level":"14","map_type":"Leaflet","address":"41.892102491006504, 12.479865382481174"}, + {"id":"41","item_id":"196","latitude":"41.886321081207","longitude":"12.485133497822","zoom_level":"14","map_type":"Leaflet","address":"41.88632108120653, 12.485133497821781"}, + {"id":"42","item_id":"197","latitude":"41.877324145199","longitude":"12.475608039812","zoom_level":"14","map_type":"Leaflet","address":"41.87732414519913, 12.475608039812117"}, + {"id":"43","item_id":"198","latitude":"41.885153678593","longitude":"12.473406069363","zoom_level":"14","map_type":"Leaflet","address":"41.885153678593056, 12.47340606936262"}, + {"id":"44","item_id":"199","latitude":"41.907629933922","longitude":"12.476031068987","zoom_level":"14","map_type":"Leaflet","address":"41.90762993392159, 12.476031068987332"}, + {"id":"45","item_id":"200","latitude":"41.888980686395","longitude":"12.464158297822","zoom_level":"15","map_type":"Leaflet","address":"41.88898068639497, 12.464158297821875"}, + {"id":"46","item_id":"202","latitude":"41.88563923288","longitude":"12.494642582481","zoom_level":"15","map_type":"Leaflet","address":"41.88563923287975, 12.494642582480987"}, + {"id":"47","item_id":"203","latitude":"41.893723168251","longitude":"12.467286797822","zoom_level":"14","map_type":"Leaflet","address":"41.89372316825104, 12.467286797822025"}, + {"id":"48","item_id":"204","latitude":"41.893723168251","longitude":"12.467286797822","zoom_level":"14","map_type":"Leaflet","address":"41.89372316825104, 12.467286797822025"}, + {"id":"49","item_id":"205","latitude":"41.88888936067","longitude":"12.466322253646","zoom_level":"14","map_type":"Leaflet","address":"41.88888936067022, 12.466322253645888"}, + {"id":"50","item_id":"206","latitude":"41.917846368856","longitude":"12.450085701258","zoom_level":"14","map_type":"Leaflet","address":"41.917846368855585, 12.450085701257574"}, + {"id":"51","item_id":"207","latitude":"41.876862086023","longitude":"12.481494913162","zoom_level":"14","map_type":"Leaflet","address":"41.876862086022605, 12.481494913162338"}, + {"id":"52","item_id":"208","latitude":"41.900659","longitude":"12.466357","zoom_level":"14","map_type":"Leaflet","address":""}, + {"id":"53","item_id":"212","latitude":"41.896645808991","longitude":"12.498797726657","zoom_level":"14","map_type":"Leaflet","address":"41.89664580899126, 12.498797726657342"}, + {"id":"54","item_id":"213","latitude":"41.893515","longitude":"12.48305","zoom_level":"14","map_type":"Leaflet","address":"41.8935273643236, 12.482750017140422"}, + {"id":"55","item_id":"214","latitude":"41.888214953099","longitude":"12.481633297822","zoom_level":"14","map_type":"Leaflet","address":"41.888214953099265, 12.481633297821924"}, + {"id":"56","item_id":"215","latitude":"41.889692476063","longitude":"12.483134024811","zoom_level":"14","map_type":"Leaflet","address":"41.889692476062926, 12.483134024810733"}, + {"id":"57","item_id":"216","latitude":"41.848302","longitude":"12.523157","zoom_level":"14","map_type":"Leaflet","address":"41.848302, 12.523157"}, + {"id":"58","item_id":"217","latitude":"41.898256304565","longitude":"12.478022597822","zoom_level":"14","map_type":"Leaflet","address":"41.89825630456512, 12.478022597822216"}, + {"id":"59","item_id":"218","latitude":"41.889266998629","longitude":"12.473736797822","zoom_level":"14","map_type":"Leaflet","address":"41.88926699862922, 12.473736797821946"}, + {"id":"60","item_id":"219","latitude":"41.902406141284","longitude":"12.456739026657","zoom_level":"14","map_type":"Leaflet","address":"41.902406141284445, 12.456739026656512"}, + {"id":"61","item_id":"220","latitude":"41.873656762765","longitude":"12.501519911316","zoom_level":"14","map_type":"Leaflet","address":"41.87365676276507, 12.501519911315821"}, + {"id":"62","item_id":"221","latitude":"41.883599","longitude":"12.47764","zoom_level":"16","map_type":"Leaflet","address":""}, + {"id":"63","item_id":"223","latitude":"41.897107561691","longitude":"12.493119341998","zoom_level":"14","map_type":"Leaflet","address":"41.8971075616912, 12.49311934199818"}, + {"id":"64","item_id":"224","latitude":"41.887326","longitude":"12.476542","zoom_level":"14","map_type":"Leaflet","address":"41.887326, 12.476542"}, + {"id":"65","item_id":"225","latitude":"41.899350942919","longitude":"12.473052740152","zoom_level":"14","map_type":"Leaflet","address":"41.899350942919064, 12.473052740151838"}, + {"id":"66","item_id":"226","latitude":"41.89287","longitude":"12.478674","zoom_level":"14","map_type":"Leaflet","address":"41.892870, 12.478674"}, + {"id":"67","item_id":"227","latitude":"41.893142440884","longitude":"12.482589884327","zoom_level":"16","map_type":"Leaflet","address":"41.89314244088442, 12.482589884326694"}, + {"id":"68","item_id":"228","latitude":"41.901055325001","longitude":"12.461381197822","zoom_level":"16","map_type":"Leaflet","address":"41.901055325000776, 12.461381197822313"}, + {"id":"69","item_id":"229","latitude":"41.900260110662","longitude":"12.462722197966","zoom_level":"17","map_type":"Leaflet","address":"41.90026011066239, 12.462722197965613"}, + {"id":"70","item_id":"230","latitude":"41.895641","longitude":"12.470092","zoom_level":"17","map_type":"Leaflet","address":"41.895641, 12.470092 "}, + {"id":"71","item_id":"231","latitude":"41.893667","longitude":"12.483972","zoom_level":"17","map_type":"Leaflet","address":"41.893667, 12.483972"}, + {"id":"72","item_id":"232","latitude":"41.893306","longitude":"12.482611","zoom_level":"16","map_type":"Leaflet","address":"41.893306, 12.482611"}, + {"id":"73","item_id":"234","latitude":"41.8905","longitude":"12.489694","zoom_level":"14","map_type":"Leaflet","address":"41.890500, 12.489694"}, + {"id":"74","item_id":"237","latitude":"41.898726472995","longitude":"12.473773956299","zoom_level":"14","map_type":"Leaflet","address":""}, + {"id":"75","item_id":"238","latitude":"41.89187498377","longitude":"12.469805957908","zoom_level":"14","map_type":"Leaflet","address":"41.89187498376976, 12.469805957907566"}, + {"id":"76","item_id":"239","latitude":"41.890110066719","longitude":"12.479297338637","zoom_level":"14","map_type":"Leaflet","address":"41.89011006671925, 12.479297338636828"}, + {"id":"77","item_id":"240","latitude":"41.889585","longitude":"12.4771113","zoom_level":"14","map_type":"Leaflet","address":"Lungotevere degli Alberteschi, 00153 Roma RM, Italy"}, + {"id":"78","item_id":"241","latitude":"41.884719","longitude":"12.479779","zoom_level":"14","map_type":"Leaflet","address":"41.884719, 12.479779"}, + {"id":"79","item_id":"242","latitude":"41.898268","longitude":"12.478044","zoom_level":"14","map_type":"Leaflet","address":"41.898268, 12.478044"}, + {"id":"80","item_id":"243","latitude":"41.880649","longitude":"12.495987","zoom_level":"14","map_type":"Leaflet","address":"41.880649, 12.495987"}, + {"id":"81","item_id":"244","latitude":"41.880689","longitude":"12.495933","zoom_level":"14","map_type":"Leaflet","address":"41.880689, 12.495933"}, + {"id":"82","item_id":"245","latitude":"41.884719","longitude":"12.479779","zoom_level":"14","map_type":"Leaflet","address":"41.884719, 12.479779"}, + {"id":"83","item_id":"246","latitude":"41.884872","longitude":"12.479772","zoom_level":"14","map_type":"Leaflet","address":"41.884872, 12.479772"}, + {"id":"84","item_id":"247","latitude":"41.886153","longitude":"12.471036","zoom_level":"14","map_type":"Leaflet","address":"41.886153, 12.471036"}, + {"id":"85","item_id":"248","latitude":"41.885358","longitude":"12.473115","zoom_level":"14","map_type":"Leaflet","address":"41.885358, 12.473115"}, + {"id":"86","item_id":"249","latitude":"41.897199","longitude":"12.493055","zoom_level":"14","map_type":"Leaflet","address":"41.897199, 12.493055"}, + {"id":"87","item_id":"250","latitude":"41.903044","longitude":"12.480626","zoom_level":"14","map_type":"Leaflet","address":"41.903044, 12.480626"}, + {"id":"88","item_id":"251","latitude":"41.8934821","longitude":"12.4836481","zoom_level":"14","map_type":"Leaflet","address":"Scala dell'Arce Capitolina, 12, 00186 Roma RM, Italy"}, + {"id":"89","item_id":"252","latitude":"41.907839","longitude":"12.477293","zoom_level":"14","map_type":"Leaflet","address":"41.907839, 12.477293"}, + {"id":"90","item_id":"253","latitude":"41.901372","longitude":"12.46112","zoom_level":"14","map_type":"Leaflet","address":"41.901372, 12.46112"}, + {"id":"91","item_id":"254","latitude":"41.887276","longitude":"12.503431","zoom_level":"14","map_type":"Leaflet","address":"41.887276, 12.503431"}, + {"id":"92","item_id":"255","latitude":"41.88961","longitude":"12.47678","zoom_level":"14","map_type":"Leaflet","address":"41.88961, 12.47678"}, + {"id":"93","item_id":"256","latitude":"41.90045","longitude":"12.48368","zoom_level":"14","map_type":"Leaflet","address":"41.90045, 12.48368"}, + {"id":"94","item_id":"257","latitude":"41.90007","longitude":"12.47134","zoom_level":"14","map_type":"Leaflet","address":"41.90007, 12.47134"}, + {"id":"95","item_id":"258","latitude":"41.88967","longitude":"12.47112","zoom_level":"14","map_type":"Leaflet","address":"41.88967, 12.47112"}, + {"id":"96","item_id":"259","latitude":"41.90076","longitude":"12.48331","zoom_level":"14","map_type":"Leaflet","address":"41.90076, 12.48331"}, + {"id":"97","item_id":"260","latitude":"41.899485","longitude":"12.476887","zoom_level":"14","map_type":"Leaflet","address":"41.899485, 12.476887"}, + {"id":"98","item_id":"261","latitude":"41.890191","longitude":"12.494369","zoom_level":"14","map_type":"Leaflet","address":"41.890191, 12.494369"}, + {"id":"99","item_id":"262","latitude":"41.8935737","longitude":"12.4825837","zoom_level":"14","map_type":"Leaflet","address":"41.8935737, 12.4825837"}, + {"id":"100","item_id":"263","latitude":"41.886169","longitude":"12.505678","zoom_level":"14","map_type":"Leaflet","address":"41.886169, 12.505678"}, + {"id":"101","item_id":"264","latitude":"41.899873","longitude":"12.466858","zoom_level":"14","map_type":"Leaflet","address":"41.899873, 12.466858"}, + {"id":"102","item_id":"265","latitude":"41.895523","longitude":"12.473031","zoom_level":"14","map_type":"Leaflet","address":"41.895523, 12.473031"}, + {"id":"103","item_id":"266","latitude":"41.903247","longitude":"12.466324","zoom_level":"14","map_type":"Leaflet","address":"41.903247, 12.466324"}, + {"id":"104","item_id":"267","latitude":"41.893469","longitude":"12.482699","zoom_level":"14","map_type":"Leaflet","address":"41.893469, 12.482699"}, + {"id":"105","item_id":"268","latitude":"41.892454","longitude":"12.485379","zoom_level":"14","map_type":"Leaflet","address":"41.892454, 12.485379"}, + {"id":"106","item_id":"269","latitude":"41.903077","longitude":"12.45398","zoom_level":"14","map_type":"Leaflet","address":"41.903077, 12.45398"}, + {"id":"107","item_id":"270","latitude":"41.889594","longitude":"12.497533","zoom_level":"14","map_type":"Leaflet","address":"41.889594, 12.497533"}, + {"id":"108","item_id":"271","latitude":"41.903077","longitude":"12.45398","zoom_level":"14","map_type":"Leaflet","address":"41.903077, 12.45398"}, + {"id":"109","item_id":"272","latitude":"41.895226","longitude":"12.487029","zoom_level":"14","map_type":"Leaflet","address":"41.895226, 12.487029"}, + {"id":"110","item_id":"273","latitude":"41.898429","longitude":"12.498194","zoom_level":"14","map_type":"Leaflet","address":"41.898429, 12.498194"}, + {"id":"111","item_id":"274","latitude":"41.892662","longitude":"12.485325","zoom_level":"14","map_type":"Leaflet","address":"41.892662, 12.485325"}, + {"id":"112","item_id":"275","latitude":"41.886629","longitude":"12.491857","zoom_level":"14","map_type":"Leaflet","address":"41.886629, 12.491857"}, + {"id":"113","item_id":"276","latitude":"41.892454","longitude":"12.485379","zoom_level":"17","map_type":"Leaflet","address":"41.892454, 12.485379"}, + {"id":"114","item_id":"277","latitude":"41.893518907561","longitude":"12.482801797821","zoom_level":"14","map_type":"Leaflet","address":"41.89351890756098, 12.482801797821104"}, + {"id":"115","item_id":"278","latitude":"41.892786436354","longitude":"12.478674211473","zoom_level":"14","map_type":"Leaflet","address":"41.892786436354406, 12.478674211473296"}, + {"id":"116","item_id":"279","latitude":"41.892677915412","longitude":"12.48528208248","zoom_level":"14","map_type":"Leaflet","address":"41.89267791541243, 12.485282082480264"}, + {"id":"117","item_id":"280","latitude":"41.892531110028","longitude":"12.476266569145","zoom_level":"14","map_type":"Leaflet","address":"41.8925311100277, 12.47626656914521"}, + {"id":"118","item_id":"281","latitude":"41.89513464496","longitude":"12.487007271165","zoom_level":"14","map_type":"Leaflet","address":"41.89513464495978, 12.487007271164801"}, + {"id":"119","item_id":"282","latitude":"41.885241540513","longitude":"12.473341696344","zoom_level":"14","map_type":"Leaflet","address":"41.88524154051263, 12.47334169634412"}, + {"id":"120","item_id":"283","latitude":"41.893730207033","longitude":"12.487829140151","zoom_level":"14","map_type":"Leaflet","address":"41.89373020703261, 12.487829140150724"}, + {"id":"121","item_id":"284","latitude":"41.885373652619","longitude":"12.473200441997","zoom_level":"14","map_type":"Leaflet","address":"41.88537365261865, 12.47320044199688"}, + {"id":"122","item_id":"285","latitude":"41.887352990974","longitude":"12.469800768987","zoom_level":"14","map_type":"Leaflet","address":"41.88735299097397, 12.469800768986659"}, + {"id":"123","item_id":"286","latitude":"41.887368965328","longitude":"12.469800768987","zoom_level":"14","map_type":"Leaflet","address":"41.88736896532752, 12.469800768986659"}, + {"id":"124","item_id":"289","latitude":"41.897557","longitude":"12.498546","zoom_level":"16","map_type":"Leaflet","address":"41.897557, 12.498546"}, + {"id":"125","item_id":"290","latitude":"41.894545377593","longitude":"12.480055197821","zoom_level":"14","map_type":"Leaflet","address":"41.89454537759293, 12.480055197821097"}, + {"id":"126","item_id":"291","latitude":"41.890783","longitude":"12.477983","zoom_level":"5","map_type":"Leaflet","address":"41.890783, 12.477983"}, + {"id":"127","item_id":"292","latitude":"41.89359","longitude":"12.487928","zoom_level":"17","map_type":"Leaflet","address":"41.893590, 12.487928"}, + {"id":"128","item_id":"293","latitude":"41.895959","longitude":"12.48667","zoom_level":"5","map_type":"Leaflet","address":"41.895959, 12.486670"}, + {"id":"129","item_id":"294","latitude":"41.900524","longitude":"12.472867","zoom_level":"18","map_type":"Leaflet","address":"41.900524, 12.472867"}, + {"id":"130","item_id":"295","latitude":"41.901282137244","longitude":"12.473149997822","zoom_level":"14","map_type":"Leaflet","address":"41.901282137243555, 12.473149997822318"}, + {"id":"131","item_id":"296","latitude":"41.908487466461","longitude":"12.482542061316","zoom_level":"14","map_type":"Leaflet","address":"41.90848746646136, 12.482542061315895"}, + {"id":"132","item_id":"298","latitude":"41.894194444419","longitude":"12.483254355492","zoom_level":"14","map_type":"Leaflet","address":"41.894194444418765, 12.483254355492441"}, + {"id":"133","item_id":"301","latitude":"41.888603700412","longitude":"12.461419682481","zoom_level":"14","map_type":"Leaflet","address":"41.88860370041222, 12.461419682481113"}, + {"id":"134","item_id":"302","latitude":"41.878855514876","longitude":"12.485100938305","zoom_level":"14","map_type":"Leaflet","address":"41.8788555148763, 12.485100938304804"}, + {"id":"135","item_id":"304","latitude":"41.892557835475","longitude":"12.470728637736","zoom_level":"14","map_type":"Leaflet","address":"41.89255783547505, 12.470728637735547"}, + {"id":"136","item_id":"305","latitude":"41.892557835475","longitude":"12.470728637736","zoom_level":"14","map_type":"Leaflet","address":"41.89255783547505, 12.470728637735547"}, + {"id":"137","item_id":"306","latitude":"41.901528079675","longitude":"12.461481359519","zoom_level":"14","map_type":"Leaflet","address":"41.90152807967454, 12.461481359518613"}, + {"id":"138","item_id":"308","latitude":"41.880650097867","longitude":"12.495929982481","zoom_level":"14","map_type":"Leaflet","address":"41.88065009786724, 12.49592998248082"}, + {"id":"139","item_id":"309","latitude":"41.885575333712","longitude":"12.494621124811","zoom_level":"14","map_type":"Leaflet","address":"41.88557533371161, 12.49462112481059"}, + {"id":"140","item_id":"310","latitude":"41.899377902131","longitude":"12.471554362811","zoom_level":"18","map_type":"Leaflet","address":""}, + {"id":"141","item_id":"311","latitude":"41.887565680185","longitude":"12.477932426657","zoom_level":"14","map_type":"Leaflet","address":"41.88756568018467, 12.477932426657022"}, + {"id":"142","item_id":"312","latitude":"41.885567346311","longitude":"12.494631853646","zoom_level":"14","map_type":"Leaflet","address":"41.885567346311106, 12.494631853645792"}, + {"id":"143","item_id":"313","latitude":"41.892391717093","longitude":"12.467599868987","zoom_level":"14","map_type":"Leaflet","address":"41.89239171709264, 12.467599868986841"}, + {"id":"144","item_id":"314","latitude":"41.889452938315","longitude":"12.4754483063","zoom_level":"18","map_type":"Leaflet","address":"41.88945293831456, 12.475448306300217"}, + {"id":"145","item_id":"315","latitude":"41.88925901169","longitude":"12.473704611316","zoom_level":"14","map_type":"Leaflet","address":"41.88925901169028, 12.473704611316352"}, + {"id":"146","item_id":"316","latitude":"41.867179746198","longitude":"12.524108513162","zoom_level":"14","map_type":"Leaflet","address":"41.86717974619808, 12.524108513162032"}, + {"id":"147","item_id":"317","latitude":"41.887333642226","longitude":"12.476563068987","zoom_level":"14","map_type":"Leaflet","address":"41.887333642225876, 12.476563068986671"}, + {"id":"148","item_id":"318","latitude":"41.890884967797","longitude":"12.488628040152","zoom_level":"14","map_type":"Leaflet","address":"41.890884967796964, 12.488628040151585"}, + {"id":"149","item_id":"319","latitude":"41.892102491006","longitude":"12.479865382481","zoom_level":"14","map_type":"Leaflet","address":"41.892102491006504, 12.479865382481174"}, + {"id":"150","item_id":"320","latitude":"41.886321081207","longitude":"12.485133497822","zoom_level":"14","map_type":"Leaflet","address":"41.88632108120653, 12.485133497821781"}, + {"id":"151","item_id":"321","latitude":"41.877324145199","longitude":"12.475608039812","zoom_level":"14","map_type":"Leaflet","address":"41.87732414519913, 12.475608039812117"}, + {"id":"152","item_id":"322","latitude":"41.885153678593","longitude":"12.473406069363","zoom_level":"14","map_type":"Leaflet","address":"41.885153678593056, 12.47340606936262"}, + {"id":"153","item_id":"323","latitude":"41.907629933922","longitude":"12.476031068987","zoom_level":"14","map_type":"Leaflet","address":"41.90762993392159, 12.476031068987332"}, + {"id":"154","item_id":"324","latitude":"41.888980686395","longitude":"12.464158297822","zoom_level":"15","map_type":"Leaflet","address":"41.88898068639497, 12.464158297821875"}, + {"id":"155","item_id":"326","latitude":"41.88563923288","longitude":"12.494642582481","zoom_level":"15","map_type":"Leaflet","address":"41.88563923287975, 12.494642582480987"}, + {"id":"156","item_id":"327","latitude":"41.893723168251","longitude":"12.467286797822","zoom_level":"14","map_type":"Leaflet","address":"41.89372316825104, 12.467286797822025"}, + {"id":"157","item_id":"328","latitude":"41.893723168251","longitude":"12.467286797822","zoom_level":"14","map_type":"Leaflet","address":"41.89372316825104, 12.467286797822025"}, + {"id":"158","item_id":"329","latitude":"41.88888936067","longitude":"12.466322253646","zoom_level":"14","map_type":"Leaflet","address":"41.88888936067022, 12.466322253645888"}, + {"id":"159","item_id":"330","latitude":"41.917846368856","longitude":"12.450085701258","zoom_level":"14","map_type":"Leaflet","address":"41.917846368855585, 12.450085701257574"}, + {"id":"160","item_id":"331","latitude":"41.876862086023","longitude":"12.481494913162","zoom_level":"14","map_type":"Leaflet","address":"41.876862086022605, 12.481494913162338"}, + {"id":"161","item_id":"332","latitude":"41.900659","longitude":"12.466357","zoom_level":"14","map_type":"Leaflet","address":""}, + {"id":"162","item_id":"336","latitude":"41.896645808991","longitude":"12.498797726657","zoom_level":"14","map_type":"Leaflet","address":"41.89664580899126, 12.498797726657342"}, + {"id":"163","item_id":"337","latitude":"41.893515","longitude":"12.48305","zoom_level":"14","map_type":"Leaflet","address":"41.8935273643236, 12.482750017140422"}, + {"id":"164","item_id":"338","latitude":"41.888214953099","longitude":"12.481633297822","zoom_level":"14","map_type":"Leaflet","address":"41.888214953099265, 12.481633297821924"}, + {"id":"165","item_id":"339","latitude":"41.889692476063","longitude":"12.483134024811","zoom_level":"14","map_type":"Leaflet","address":"41.889692476062926, 12.483134024810733"}, + {"id":"166","item_id":"340","latitude":"41.848302","longitude":"12.523157","zoom_level":"14","map_type":"Leaflet","address":"41.848302, 12.523157"}, + {"id":"167","item_id":"341","latitude":"41.898256304565","longitude":"12.478022597822","zoom_level":"14","map_type":"Leaflet","address":"41.89825630456512, 12.478022597822216"}, + {"id":"168","item_id":"342","latitude":"41.889266998629","longitude":"12.473736797822","zoom_level":"14","map_type":"Leaflet","address":"41.88926699862922, 12.473736797821946"}, + {"id":"169","item_id":"343","latitude":"41.902406141284","longitude":"12.456739026657","zoom_level":"14","map_type":"Leaflet","address":"41.902406141284445, 12.456739026656512"}, + {"id":"170","item_id":"344","latitude":"41.873656762765","longitude":"12.501519911316","zoom_level":"14","map_type":"Leaflet","address":"41.87365676276507, 12.501519911315821"}, + {"id":"171","item_id":"345","latitude":"41.883599","longitude":"12.47764","zoom_level":"16","map_type":"Leaflet","address":""}, + {"id":"172","item_id":"347","latitude":"41.897107561691","longitude":"12.493119341998","zoom_level":"14","map_type":"Leaflet","address":"41.8971075616912, 12.49311934199818"}, + {"id":"173","item_id":"348","latitude":"41.887326","longitude":"12.476542","zoom_level":"14","map_type":"Leaflet","address":"41.887326, 12.476542"}, + {"id":"174","item_id":"349","latitude":"41.899350942919","longitude":"12.473052740152","zoom_level":"14","map_type":"Leaflet","address":"41.899350942919064, 12.473052740151838"}, + {"id":"175","item_id":"350","latitude":"41.89287","longitude":"12.478674","zoom_level":"14","map_type":"Leaflet","address":"41.892870, 12.478674"}, + {"id":"176","item_id":"351","latitude":"41.893142440884","longitude":"12.482589884327","zoom_level":"16","map_type":"Leaflet","address":"41.89314244088442, 12.482589884326694"}, + {"id":"177","item_id":"352","latitude":"41.901055325001","longitude":"12.461381197822","zoom_level":"16","map_type":"Leaflet","address":"41.901055325000776, 12.461381197822313"}, + {"id":"178","item_id":"353","latitude":"41.900260110662","longitude":"12.462722197966","zoom_level":"17","map_type":"Leaflet","address":"41.90026011066239, 12.462722197965613"}, + {"id":"179","item_id":"354","latitude":"41.895641","longitude":"12.470092","zoom_level":"17","map_type":"Leaflet","address":"41.895641, 12.470092 "}, + {"id":"180","item_id":"355","latitude":"41.893667","longitude":"12.483972","zoom_level":"17","map_type":"Leaflet","address":"41.893667, 12.483972"}, + {"id":"181","item_id":"356","latitude":"41.893306","longitude":"12.482611","zoom_level":"16","map_type":"Leaflet","address":"41.893306, 12.482611"}, + {"id":"182","item_id":"358","latitude":"41.8905","longitude":"12.489694","zoom_level":"14","map_type":"Leaflet","address":"41.890500, 12.489694"}, + {"id":"183","item_id":"361","latitude":"41.898726472995","longitude":"12.473773956299","zoom_level":"14","map_type":"Leaflet","address":""}, + {"id":"184","item_id":"362","latitude":"41.89187498377","longitude":"12.469805957908","zoom_level":"14","map_type":"Leaflet","address":"41.89187498376976, 12.469805957907566"}, + {"id":"185","item_id":"363","latitude":"41.890110066719","longitude":"12.479297338637","zoom_level":"14","map_type":"Leaflet","address":"41.89011006671925, 12.479297338636828"}, + {"id":"186","item_id":"364","latitude":"41.889585","longitude":"12.4771113","zoom_level":"14","map_type":"Leaflet","address":"Lungotevere degli Alberteschi, 00153 Roma RM, Italy"}, + {"id":"187","item_id":"365","latitude":"41.884719","longitude":"12.479779","zoom_level":"14","map_type":"Leaflet","address":"41.884719, 12.479779"}, + {"id":"188","item_id":"366","latitude":"41.898268","longitude":"12.478044","zoom_level":"14","map_type":"Leaflet","address":"41.898268, 12.478044"}, + {"id":"189","item_id":"367","latitude":"41.880649","longitude":"12.495987","zoom_level":"14","map_type":"Leaflet","address":"41.880649, 12.495987"}, + {"id":"190","item_id":"368","latitude":"41.880689","longitude":"12.495933","zoom_level":"14","map_type":"Leaflet","address":"41.880689, 12.495933"}, + {"id":"191","item_id":"369","latitude":"41.884719","longitude":"12.479779","zoom_level":"14","map_type":"Leaflet","address":"41.884719, 12.479779"}, + {"id":"192","item_id":"370","latitude":"41.884872","longitude":"12.479772","zoom_level":"14","map_type":"Leaflet","address":"41.884872, 12.479772"}, + {"id":"193","item_id":"371","latitude":"41.886153","longitude":"12.471036","zoom_level":"14","map_type":"Leaflet","address":"41.886153, 12.471036"}, + {"id":"194","item_id":"372","latitude":"41.885358","longitude":"12.473115","zoom_level":"14","map_type":"Leaflet","address":"41.885358, 12.473115"}, + {"id":"195","item_id":"373","latitude":"41.897199","longitude":"12.493055","zoom_level":"14","map_type":"Leaflet","address":"41.897199, 12.493055"}, + {"id":"196","item_id":"374","latitude":"41.903044","longitude":"12.480626","zoom_level":"14","map_type":"Leaflet","address":"41.903044, 12.480626"}, + {"id":"197","item_id":"375","latitude":"41.8934821","longitude":"12.4836481","zoom_level":"14","map_type":"Leaflet","address":"Scala dell'Arce Capitolina, 12, 00186 Roma RM, Italy"}, + {"id":"198","item_id":"376","latitude":"41.907839","longitude":"12.477293","zoom_level":"14","map_type":"Leaflet","address":"41.907839, 12.477293"}, + {"id":"199","item_id":"377","latitude":"41.901372","longitude":"12.46112","zoom_level":"14","map_type":"Leaflet","address":"41.901372, 12.46112"}, + {"id":"200","item_id":"378","latitude":"41.887276","longitude":"12.503431","zoom_level":"14","map_type":"Leaflet","address":"41.887276, 12.503431"}, + {"id":"201","item_id":"379","latitude":"41.88961","longitude":"12.47678","zoom_level":"14","map_type":"Leaflet","address":"41.88961, 12.47678"}, + {"id":"202","item_id":"380","latitude":"41.90045","longitude":"12.48368","zoom_level":"14","map_type":"Leaflet","address":"41.90045, 12.48368"}, + {"id":"203","item_id":"381","latitude":"41.90007","longitude":"12.47134","zoom_level":"14","map_type":"Leaflet","address":"41.90007, 12.47134"}, + {"id":"204","item_id":"382","latitude":"41.88967","longitude":"12.47112","zoom_level":"14","map_type":"Leaflet","address":"41.88967, 12.47112"}, + {"id":"205","item_id":"383","latitude":"41.90076","longitude":"12.48331","zoom_level":"14","map_type":"Leaflet","address":"41.90076, 12.48331"}, + {"id":"206","item_id":"384","latitude":"41.899485","longitude":"12.476887","zoom_level":"14","map_type":"Leaflet","address":"41.899485, 12.476887"}, + {"id":"207","item_id":"385","latitude":"41.890191","longitude":"12.494369","zoom_level":"14","map_type":"Leaflet","address":"41.890191, 12.494369"}, + {"id":"208","item_id":"386","latitude":"41.8935737","longitude":"12.4825837","zoom_level":"14","map_type":"Leaflet","address":"41.8935737, 12.4825837"}, + {"id":"209","item_id":"387","latitude":"41.886169","longitude":"12.505678","zoom_level":"14","map_type":"Leaflet","address":"41.886169, 12.505678"}, + {"id":"210","item_id":"388","latitude":"41.899873","longitude":"12.466858","zoom_level":"14","map_type":"Leaflet","address":"41.899873, 12.466858"}, + {"id":"211","item_id":"389","latitude":"41.895523","longitude":"12.473031","zoom_level":"14","map_type":"Leaflet","address":"41.895523, 12.473031"}, + {"id":"212","item_id":"390","latitude":"41.903247","longitude":"12.466324","zoom_level":"14","map_type":"Leaflet","address":"41.903247, 12.466324"}, + {"id":"213","item_id":"391","latitude":"41.893469","longitude":"12.482699","zoom_level":"14","map_type":"Leaflet","address":"41.893469, 12.482699"}, + {"id":"214","item_id":"392","latitude":"41.892454","longitude":"12.485379","zoom_level":"14","map_type":"Leaflet","address":"41.892454, 12.485379"}, + {"id":"215","item_id":"393","latitude":"41.903077","longitude":"12.45398","zoom_level":"14","map_type":"Leaflet","address":"41.903077, 12.45398"}, + {"id":"216","item_id":"394","latitude":"41.889594","longitude":"12.497533","zoom_level":"14","map_type":"Leaflet","address":"41.889594, 12.497533"}, + {"id":"217","item_id":"395","latitude":"41.903077","longitude":"12.45398","zoom_level":"14","map_type":"Leaflet","address":"41.903077, 12.45398"}, + {"id":"218","item_id":"396","latitude":"41.895226","longitude":"12.487029","zoom_level":"14","map_type":"Leaflet","address":"41.895226, 12.487029"}, + {"id":"219","item_id":"397","latitude":"41.898429","longitude":"12.498194","zoom_level":"14","map_type":"Leaflet","address":"41.898429, 12.498194"}, + {"id":"220","item_id":"398","latitude":"41.892662","longitude":"12.485325","zoom_level":"14","map_type":"Leaflet","address":"41.892662, 12.485325"}, + {"id":"221","item_id":"399","latitude":"41.886629","longitude":"12.491857","zoom_level":"14","map_type":"Leaflet","address":"41.886629, 12.491857"}, + {"id":"222","item_id":"400","latitude":"41.892454","longitude":"12.485379","zoom_level":"17","map_type":"Leaflet","address":"41.892454, 12.485379"}, + {"id":"223","item_id":"401","latitude":"41.893518907561","longitude":"12.482801797821","zoom_level":"14","map_type":"Leaflet","address":"41.89351890756098, 12.482801797821104"}, + {"id":"224","item_id":"402","latitude":"41.892786436354","longitude":"12.478674211473","zoom_level":"14","map_type":"Leaflet","address":"41.892786436354406, 12.478674211473296"}, + {"id":"225","item_id":"403","latitude":"41.892677915412","longitude":"12.48528208248","zoom_level":"14","map_type":"Leaflet","address":"41.89267791541243, 12.485282082480264"}, + {"id":"226","item_id":"404","latitude":"41.892531110028","longitude":"12.476266569145","zoom_level":"14","map_type":"Leaflet","address":"41.8925311100277, 12.47626656914521"}, + {"id":"227","item_id":"405","latitude":"41.89513464496","longitude":"12.487007271165","zoom_level":"14","map_type":"Leaflet","address":"41.89513464495978, 12.487007271164801"}, + {"id":"228","item_id":"406","latitude":"41.885241540513","longitude":"12.473341696344","zoom_level":"14","map_type":"Leaflet","address":"41.88524154051263, 12.47334169634412"}, + {"id":"229","item_id":"407","latitude":"41.893730207033","longitude":"12.487829140151","zoom_level":"14","map_type":"Leaflet","address":"41.89373020703261, 12.487829140150724"}, + {"id":"230","item_id":"408","latitude":"41.885373652619","longitude":"12.473200441997","zoom_level":"14","map_type":"Leaflet","address":"41.88537365261865, 12.47320044199688"}, + {"id":"231","item_id":"409","latitude":"41.887352990974","longitude":"12.469800768987","zoom_level":"14","map_type":"Leaflet","address":"41.88735299097397, 12.469800768986659"}, + {"id":"232","item_id":"410","latitude":"41.887368965328","longitude":"12.469800768987","zoom_level":"14","map_type":"Leaflet","address":"41.88736896532752, 12.469800768986659"}, + {"id":"233","item_id":"411","latitude":"41.897557","longitude":"12.498546","zoom_level":"16","map_type":"Leaflet","address":"41.897557, 12.498546"}, + {"id":"234","item_id":"412","latitude":"41.894545377593","longitude":"12.480055197821","zoom_level":"14","map_type":"Leaflet","address":"41.89454537759293, 12.480055197821097"}, + {"id":"235","item_id":"413","latitude":"41.890783","longitude":"12.477983","zoom_level":"5","map_type":"Leaflet","address":"41.890783, 12.477983"}, + {"id":"236","item_id":"414","latitude":"41.89359","longitude":"12.487928","zoom_level":"17","map_type":"Leaflet","address":"41.893590, 12.487928"}, + {"id":"237","item_id":"415","latitude":"41.895959","longitude":"12.48667","zoom_level":"5","map_type":"Leaflet","address":"41.895959, 12.486670"}, + {"id":"238","item_id":"416","latitude":"41.900524","longitude":"12.472867","zoom_level":"18","map_type":"Leaflet","address":"41.900524, 12.472867"}, + {"id":"239","item_id":"417","latitude":"41.901282137244","longitude":"12.473149997822","zoom_level":"14","map_type":"Leaflet","address":"41.901282137243555, 12.473149997822318"}, + {"id":"240","item_id":"418","latitude":"41.908487466461","longitude":"12.482542061316","zoom_level":"14","map_type":"Leaflet","address":"41.90848746646136, 12.482542061315895"}, + {"id":"241","item_id":"420","latitude":"41.894194444419","longitude":"12.483254355492","zoom_level":"14","map_type":"Leaflet","address":"41.894194444418765, 12.483254355492441"}, + {"id":"242","item_id":"423","latitude":"41.888603700412","longitude":"12.461419682481","zoom_level":"14","map_type":"Leaflet","address":"41.88860370041222, 12.461419682481113"}, + {"id":"243","item_id":"424","latitude":"41.878855514876","longitude":"12.485100938305","zoom_level":"14","map_type":"Leaflet","address":"41.8788555148763, 12.485100938304804"}, + {"id":"244","item_id":"426","latitude":"41.892557835475","longitude":"12.470728637736","zoom_level":"14","map_type":"Leaflet","address":"41.89255783547505, 12.470728637735547"}, + {"id":"245","item_id":"427","latitude":"41.892557835475","longitude":"12.470728637736","zoom_level":"14","map_type":"Leaflet","address":"41.89255783547505, 12.470728637735547"}, + {"id":"246","item_id":"428","latitude":"41.901528079675","longitude":"12.461481359519","zoom_level":"14","map_type":"Leaflet","address":"41.90152807967454, 12.461481359518613"}, + {"id":"247","item_id":"430","latitude":"41.880650097867","longitude":"12.495929982481","zoom_level":"14","map_type":"Leaflet","address":"41.88065009786724, 12.49592998248082"}, + {"id":"248","item_id":"431","latitude":"41.885575333712","longitude":"12.494621124811","zoom_level":"14","map_type":"Leaflet","address":"41.88557533371161, 12.49462112481059"}, + {"id":"249","item_id":"432","latitude":"41.899377902131","longitude":"12.471554362811","zoom_level":"18","map_type":"Leaflet","address":""}, + {"id":"250","item_id":"433","latitude":"41.887565680185","longitude":"12.477932426657","zoom_level":"14","map_type":"Leaflet","address":"41.88756568018467, 12.477932426657022"}, + {"id":"251","item_id":"434","latitude":"41.885567346311","longitude":"12.494631853646","zoom_level":"14","map_type":"Leaflet","address":"41.885567346311106, 12.494631853645792"}, + {"id":"252","item_id":"435","latitude":"41.892391717093","longitude":"12.467599868987","zoom_level":"14","map_type":"Leaflet","address":"41.89239171709264, 12.467599868986841"}, + {"id":"253","item_id":"436","latitude":"41.889452938315","longitude":"12.4754483063","zoom_level":"18","map_type":"Leaflet","address":"41.88945293831456, 12.475448306300217"}, + {"id":"254","item_id":"437","latitude":"41.88925901169","longitude":"12.473704611316","zoom_level":"14","map_type":"Leaflet","address":"41.88925901169028, 12.473704611316352"}, + {"id":"255","item_id":"438","latitude":"41.867179746198","longitude":"12.524108513162","zoom_level":"14","map_type":"Leaflet","address":"41.86717974619808, 12.524108513162032"}, + {"id":"256","item_id":"439","latitude":"41.887333642226","longitude":"12.476563068987","zoom_level":"14","map_type":"Leaflet","address":"41.887333642225876, 12.476563068986671"}, + {"id":"257","item_id":"440","latitude":"41.890884967797","longitude":"12.488628040152","zoom_level":"14","map_type":"Leaflet","address":"41.890884967796964, 12.488628040151585"}, + {"id":"258","item_id":"441","latitude":"41.892102491006","longitude":"12.479865382481","zoom_level":"14","map_type":"Leaflet","address":"41.892102491006504, 12.479865382481174"}, + {"id":"259","item_id":"442","latitude":"41.886321081207","longitude":"12.485133497822","zoom_level":"14","map_type":"Leaflet","address":"41.88632108120653, 12.485133497821781"}, + {"id":"260","item_id":"443","latitude":"41.877324145199","longitude":"12.475608039812","zoom_level":"14","map_type":"Leaflet","address":"41.87732414519913, 12.475608039812117"}, + {"id":"261","item_id":"444","latitude":"41.885153678593","longitude":"12.473406069363","zoom_level":"14","map_type":"Leaflet","address":"41.885153678593056, 12.47340606936262"}, + {"id":"262","item_id":"445","latitude":"41.907629933922","longitude":"12.476031068987","zoom_level":"14","map_type":"Leaflet","address":"41.90762993392159, 12.476031068987332"}, + {"id":"263","item_id":"446","latitude":"41.888980686395","longitude":"12.464158297822","zoom_level":"15","map_type":"Leaflet","address":"41.88898068639497, 12.464158297821875"}, + {"id":"264","item_id":"448","latitude":"41.88563923288","longitude":"12.494642582481","zoom_level":"15","map_type":"Leaflet","address":"41.88563923287975, 12.494642582480987"}, + {"id":"265","item_id":"449","latitude":"41.893723168251","longitude":"12.467286797822","zoom_level":"14","map_type":"Leaflet","address":"41.89372316825104, 12.467286797822025"}, + {"id":"266","item_id":"450","latitude":"41.893723168251","longitude":"12.467286797822","zoom_level":"14","map_type":"Leaflet","address":"41.89372316825104, 12.467286797822025"}, + {"id":"267","item_id":"451","latitude":"41.88888936067","longitude":"12.466322253646","zoom_level":"14","map_type":"Leaflet","address":"41.88888936067022, 12.466322253645888"}, + {"id":"268","item_id":"452","latitude":"41.917846368856","longitude":"12.450085701258","zoom_level":"14","map_type":"Leaflet","address":"41.917846368855585, 12.450085701257574"}, + {"id":"269","item_id":"453","latitude":"41.876862086023","longitude":"12.481494913162","zoom_level":"14","map_type":"Leaflet","address":"41.876862086022605, 12.481494913162338"}, + {"id":"270","item_id":"454","latitude":"41.900659","longitude":"12.466357","zoom_level":"14","map_type":"Leaflet","address":""}, + {"id":"271","item_id":"458","latitude":"41.896645808991","longitude":"12.498797726657","zoom_level":"14","map_type":"Leaflet","address":"41.89664580899126, 12.498797726657342"}, + {"id":"272","item_id":"459","latitude":"41.893515","longitude":"12.48305","zoom_level":"14","map_type":"Leaflet","address":"41.8935273643236, 12.482750017140422"}, + {"id":"273","item_id":"460","latitude":"41.888214953099","longitude":"12.481633297822","zoom_level":"14","map_type":"Leaflet","address":"41.888214953099265, 12.481633297821924"}, + {"id":"274","item_id":"461","latitude":"41.889692476063","longitude":"12.483134024811","zoom_level":"14","map_type":"Leaflet","address":"41.889692476062926, 12.483134024810733"}, + {"id":"275","item_id":"462","latitude":"41.848302","longitude":"12.523157","zoom_level":"14","map_type":"Leaflet","address":"41.848302, 12.523157"}, + {"id":"276","item_id":"463","latitude":"41.898256304565","longitude":"12.478022597822","zoom_level":"14","map_type":"Leaflet","address":"41.89825630456512, 12.478022597822216"}, + {"id":"277","item_id":"464","latitude":"41.889266998629","longitude":"12.473736797822","zoom_level":"14","map_type":"Leaflet","address":"41.88926699862922, 12.473736797821946"}, + {"id":"278","item_id":"465","latitude":"41.902406141284","longitude":"12.456739026657","zoom_level":"14","map_type":"Leaflet","address":"41.902406141284445, 12.456739026656512"}, + {"id":"279","item_id":"466","latitude":"41.873656762765","longitude":"12.501519911316","zoom_level":"14","map_type":"Leaflet","address":"41.87365676276507, 12.501519911315821"}, + {"id":"280","item_id":"467","latitude":"41.883599","longitude":"12.47764","zoom_level":"16","map_type":"Leaflet","address":""}, + {"id":"281","item_id":"469","latitude":"41.897107561691","longitude":"12.493119341998","zoom_level":"14","map_type":"Leaflet","address":"41.8971075616912, 12.49311934199818"}, + {"id":"282","item_id":"470","latitude":"41.887326","longitude":"12.476542","zoom_level":"14","map_type":"Leaflet","address":"41.887326, 12.476542"}, + {"id":"283","item_id":"471","latitude":"41.899350942919","longitude":"12.473052740152","zoom_level":"14","map_type":"Leaflet","address":"41.899350942919064, 12.473052740151838"}, + {"id":"284","item_id":"472","latitude":"41.89287","longitude":"12.478674","zoom_level":"14","map_type":"Leaflet","address":"41.892870, 12.478674"}, + {"id":"285","item_id":"473","latitude":"41.893142440884","longitude":"12.482589884327","zoom_level":"16","map_type":"Leaflet","address":"41.89314244088442, 12.482589884326694"}, + {"id":"286","item_id":"474","latitude":"41.901055325001","longitude":"12.461381197822","zoom_level":"16","map_type":"Leaflet","address":"41.901055325000776, 12.461381197822313"}, + {"id":"287","item_id":"475","latitude":"41.900260110662","longitude":"12.462722197966","zoom_level":"17","map_type":"Leaflet","address":"41.90026011066239, 12.462722197965613"}, + {"id":"288","item_id":"476","latitude":"41.895641","longitude":"12.470092","zoom_level":"17","map_type":"Leaflet","address":"41.895641, 12.470092 "}, + {"id":"289","item_id":"477","latitude":"41.893667","longitude":"12.483972","zoom_level":"17","map_type":"Leaflet","address":"41.893667, 12.483972"}, + {"id":"290","item_id":"478","latitude":"41.893306","longitude":"12.482611","zoom_level":"16","map_type":"Leaflet","address":"41.893306, 12.482611"}, + {"id":"291","item_id":"480","latitude":"41.8905","longitude":"12.489694","zoom_level":"14","map_type":"Leaflet","address":"41.890500, 12.489694"}, + {"id":"292","item_id":"483","latitude":"41.891069599999994","longitude":"12.478221754154308","zoom_level":"14","map_type":"Leaflet","address":"Ponte Fabricio, 00186, Rome"}, + {"id":"293","item_id":"484","latitude":"41.89187498377","longitude":"12.469805957908","zoom_level":"14","map_type":"Leaflet","address":"41.89187498376976, 12.469805957907566"}, + {"id":"294","item_id":"485","latitude":"41.890110066719","longitude":"12.479297338637","zoom_level":"14","map_type":"Leaflet","address":"41.89011006671925, 12.479297338636828"}, + {"id":"295","item_id":"486","latitude":"41.889585","longitude":"12.4771113","zoom_level":"14","map_type":"Leaflet","address":"Lungotevere degli Alberteschi, 00153 Roma RM, Italy"}, + {"id":"296","item_id":"487","latitude":"41.884719","longitude":"12.479779","zoom_level":"14","map_type":"Leaflet","address":"41.884719, 12.479779"}, + {"id":"297","item_id":"488","latitude":"41.898268","longitude":"12.478044","zoom_level":"14","map_type":"Leaflet","address":"41.898268, 12.478044"}, + {"id":"298","item_id":"489","latitude":"41.880649","longitude":"12.495987","zoom_level":"14","map_type":"Leaflet","address":"41.880649, 12.495987"}, + {"id":"299","item_id":"490","latitude":"41.880689","longitude":"12.495933","zoom_level":"14","map_type":"Leaflet","address":"41.880689, 12.495933"}, + {"id":"300","item_id":"491","latitude":"41.884719","longitude":"12.479779","zoom_level":"14","map_type":"Leaflet","address":"41.884719, 12.479779"}, + {"id":"301","item_id":"492","latitude":"41.884872","longitude":"12.479772","zoom_level":"14","map_type":"Leaflet","address":"41.884872, 12.479772"}, + {"id":"302","item_id":"493","latitude":"41.886153","longitude":"12.471036","zoom_level":"14","map_type":"Leaflet","address":"41.886153, 12.471036"}, + {"id":"303","item_id":"494","latitude":"41.885358","longitude":"12.473115","zoom_level":"14","map_type":"Leaflet","address":"41.885358, 12.473115"}, + {"id":"304","item_id":"495","latitude":"41.897199","longitude":"12.493055","zoom_level":"14","map_type":"Leaflet","address":"41.897199, 12.493055"}, + {"id":"305","item_id":"496","latitude":"41.903044","longitude":"12.480626","zoom_level":"14","map_type":"Leaflet","address":"41.903044, 12.480626"}, + {"id":"306","item_id":"497","latitude":"41.8934821","longitude":"12.4836481","zoom_level":"14","map_type":"Leaflet","address":"Scala dell'Arce Capitolina, 12, 00186 Roma RM, Italy"}, + {"id":"307","item_id":"498","latitude":"41.907839","longitude":"12.477293","zoom_level":"14","map_type":"Leaflet","address":"41.907839, 12.477293"}, + {"id":"308","item_id":"499","latitude":"41.901372","longitude":"12.46112","zoom_level":"14","map_type":"Leaflet","address":"41.901372, 12.46112"}, + {"id":"309","item_id":"500","latitude":"41.887276","longitude":"12.503431","zoom_level":"14","map_type":"Leaflet","address":"41.887276, 12.503431"}, + {"id":"310","item_id":"501","latitude":"41.88961","longitude":"12.47678","zoom_level":"14","map_type":"Leaflet","address":"41.88961, 12.47678"}, + {"id":"311","item_id":"502","latitude":"41.90045","longitude":"12.48368","zoom_level":"14","map_type":"Leaflet","address":"41.90045, 12.48368"}, + {"id":"312","item_id":"503","latitude":"41.90007","longitude":"12.47134","zoom_level":"14","map_type":"Leaflet","address":"41.90007, 12.47134"}, + {"id":"313","item_id":"504","latitude":"41.88967","longitude":"12.47112","zoom_level":"14","map_type":"Leaflet","address":"41.88967, 12.47112"}, + {"id":"314","item_id":"505","latitude":"41.90076","longitude":"12.48331","zoom_level":"14","map_type":"Leaflet","address":"41.90076, 12.48331"}, + {"id":"315","item_id":"506","latitude":"41.899485","longitude":"12.476887","zoom_level":"14","map_type":"Leaflet","address":"41.899485, 12.476887"}, + {"id":"316","item_id":"507","latitude":"41.890191","longitude":"12.494369","zoom_level":"14","map_type":"Leaflet","address":"41.890191, 12.494369"}, + {"id":"317","item_id":"508","latitude":"41.8935737","longitude":"12.4825837","zoom_level":"14","map_type":"Leaflet","address":"41.8935737, 12.4825837"}, + {"id":"318","item_id":"509","latitude":"41.886169","longitude":"12.505678","zoom_level":"14","map_type":"Leaflet","address":"41.886169, 12.505678"}, + {"id":"319","item_id":"510","latitude":"41.899873","longitude":"12.466858","zoom_level":"14","map_type":"Leaflet","address":"41.899873, 12.466858"}, + {"id":"320","item_id":"511","latitude":"41.895523","longitude":"12.473031","zoom_level":"14","map_type":"Leaflet","address":"41.895523, 12.473031"}, + {"id":"321","item_id":"512","latitude":"41.903247","longitude":"12.466324","zoom_level":"14","map_type":"Leaflet","address":"41.903247, 12.466324"}, + {"id":"322","item_id":"513","latitude":"41.893469","longitude":"12.482699","zoom_level":"14","map_type":"Leaflet","address":"41.893469, 12.482699"}, + {"id":"323","item_id":"514","latitude":"41.892454","longitude":"12.485379","zoom_level":"14","map_type":"Leaflet","address":"41.892454, 12.485379"}, + {"id":"324","item_id":"515","latitude":"41.90220018229139","longitude":"12.455137968063354","zoom_level":"16","map_type":"Leaflet","address":""}, + {"id":"325","item_id":"516","latitude":"41.889594","longitude":"12.497533","zoom_level":"14","map_type":"Leaflet","address":"41.889594, 12.497533"}, + {"id":"326","item_id":"517","latitude":"41.90228901893026","longitude":"12.457423210144043","zoom_level":"14","map_type":"Leaflet","address":""}, + {"id":"327","item_id":"518","latitude":"41.895226","longitude":"12.487029","zoom_level":"14","map_type":"Leaflet","address":"41.895226, 12.487029"}, + {"id":"328","item_id":"519","latitude":"41.898429","longitude":"12.498194","zoom_level":"14","map_type":"Leaflet","address":"41.898429, 12.498194"}, + {"id":"329","item_id":"520","latitude":"41.892662","longitude":"12.485325","zoom_level":"14","map_type":"Leaflet","address":"41.892662, 12.485325"}, + {"id":"330","item_id":"521","latitude":"41.886629","longitude":"12.491857","zoom_level":"14","map_type":"Leaflet","address":"41.886629, 12.491857"}, + {"id":"331","item_id":"522","latitude":"41.892454","longitude":"12.485379","zoom_level":"17","map_type":"Leaflet","address":"41.892454, 12.485379"}, + {"id":"332","item_id":"523","latitude":"41.893518907561","longitude":"12.482801797821","zoom_level":"14","map_type":"Leaflet","address":"41.89351890756098, 12.482801797821104"}, + {"id":"333","item_id":"524","latitude":"41.892786436354","longitude":"12.478674211473","zoom_level":"14","map_type":"Leaflet","address":"41.892786436354406, 12.478674211473296"}, + {"id":"334","item_id":"525","latitude":"41.892677915412","longitude":"12.48528208248","zoom_level":"14","map_type":"Leaflet","address":"41.89267791541243, 12.485282082480264"}, + {"id":"335","item_id":"526","latitude":"41.892531110028","longitude":"12.476266569145","zoom_level":"14","map_type":"Leaflet","address":"41.8925311100277, 12.47626656914521"}, + {"id":"336","item_id":"527","latitude":"41.89513464496","longitude":"12.487007271165","zoom_level":"14","map_type":"Leaflet","address":"41.89513464495978, 12.487007271164801"}, + {"id":"337","item_id":"528","latitude":"41.885241540513","longitude":"12.473341696344","zoom_level":"14","map_type":"Leaflet","address":"41.88524154051263, 12.47334169634412"}, + {"id":"338","item_id":"529","latitude":"41.893730207033","longitude":"12.487829140151","zoom_level":"14","map_type":"Leaflet","address":"41.89373020703261, 12.487829140150724"}, + {"id":"339","item_id":"530","latitude":"41.885373652619","longitude":"12.473200441997","zoom_level":"14","map_type":"Leaflet","address":"41.88537365261865, 12.47320044199688"}, + {"id":"340","item_id":"531","latitude":"41.887352990974","longitude":"12.469800768987","zoom_level":"14","map_type":"Leaflet","address":"41.88735299097397, 12.469800768986659"}, + {"id":"341","item_id":"532","latitude":"41.887368965328","longitude":"12.469800768987","zoom_level":"14","map_type":"Leaflet","address":"41.88736896532752, 12.469800768986659"}, + {"id":"342","item_id":"456","latitude":"41.9000664","longitude":"12.4713595","zoom_level":"15","map_type":"Leaflet","address":"Arco della Pace 10\/11, Rome"}, + {"id":"343","item_id":"447","latitude":"41.889521","longitude":"12.4939594","zoom_level":"15","map_type":"Leaflet","address":"Via dei SS. Quattro, 20, 00184 Roma RM, Italy"}, + {"id":"344","item_id":"455","latitude":"41.9004777","longitude":"12.4665819","zoom_level":"15","map_type":"Leaflet","address":"Via del Banco di Santo Spirito, 60\/ 61, 00186 Roma RM"}, + {"id":"345","item_id":"429","latitude":"41.88709745","longitude":"12.469286055275456","zoom_level":"15","map_type":"Leaflet","address":"Piazza di S. Cosimato, 10, 00153 Roma RM"}, + {"id":"346","item_id":"421","latitude":"41.8865243","longitude":"12.4764574","zoom_level":"15","map_type":"Leaflet","address":"Via di S. Michele, 00153 Roma RM"}, + {"id":"347","item_id":"422","latitude":"41.9048691","longitude":"12.4755402","zoom_level":"15","map_type":"Leaflet","address":"Via Tomacelli, 132, 00186 Roma RM"}, + {"id":"348","item_id":"425","latitude":"41.8921993","longitude":"12.4676289","zoom_level":"15","map_type":"Leaflet","address":"Via di Porta Settimiana, 00165 Roma RM, Italy"}, + {"id":"349","item_id":"468","latitude":"41.8867901","longitude":"12.4806725","zoom_level":"15","map_type":"Leaflet","address":"Clivo di Rocca Savella, 10, 00153 Roma RM"}, + {"id":"350","item_id":"479","latitude":"41.90154125","longitude":"12.463969911440824","zoom_level":"14","map_type":"Leaflet","address":"41°54'07.3\"N 12°27'52.9\"E"}, + {"id":"351","item_id":"481","latitude":"41.8178036","longitude":"12.5063717","zoom_level":"15","map_type":"Leaflet","address":"Vicolo della Cecchignoletta, 14, 00143 Roma RM, Italy"}, + {"id":"352","item_id":"482","latitude":"41.90043215","longitude":"12.457709832382092","zoom_level":"15","map_type":"Leaflet","address":"Via Paolo VI, 25, 00193 Roma RM"} + ] + } + ] + \ No newline at end of file