]> git.openstreetmap.org Git - nominatim.git/commitdiff
use geometry WKT for highlighting in search view
authorSarah Hoffmann <lonvia@denofr.de>
Fri, 9 Nov 2012 21:35:45 +0000 (22:35 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Fri, 9 Nov 2012 21:35:45 +0000 (22:35 +0100)
also cleans up unused code in details view

lib/template/details-html.php
lib/template/search-html.php
website/search.php

index 9c967fff0844ce640471b0c921d806c1da6aae5d..f20ec619934a729e294a58aaf1aaf5222c93d5af 100644 (file)
@@ -56,21 +56,13 @@ body {
                        map.addLayer(new OpenLayers.Layer.OSM.<?php echo CONST_Tile_Default;?>("Default",
                         { attribution : '© <a target="_parent" href="http://www.openstreetmap.org">OpenStreetMap</a> and contributors, under an <a target="_parent" href="http://www.openstreetmap.org/copyright">open license</a>'}));
 
-                        var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
-                        layer_style.fillOpacity = 0.2;
-                        layer_style.graphicOpacity = 0.2;
+                       var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
+                       layer_style.fillOpacity = 0.2;
+                       layer_style.graphicOpacity = 0.2;
 
                        vectorLayer = new OpenLayers.Layer.Vector("Points", {style: layer_style});
                        map.addLayer(vectorLayer);
 
-                       var pointList = [];
-                       var style = {
-                               strokeColor: "#75ADFF",
-                               fillColor: "#F0F7FF",
-                               strokeWidth: 2,
-                               strokeOpacity: 0.75,
-                               fillOpacity: 0.75
-                       };
                        var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
                        var proj_map = map.getProjectionObject();
 
index 7698ebd0de2a66aa399680647ebb1775bf3569ac..3fd8096dda390e2b3004969bd09ca2d28ef4daf3 100644 (file)
@@ -216,40 +216,34 @@ form{
                                map.panTo(lonLat, 10);
                }
 
-               function panToLatLonBoundingBox(lat,lon,minlat,maxlat,minlon,maxlon,points) {
-                       var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
-                       var proj_map = map.getProjectionObject();
-                        map.zoomToExtent(new OpenLayers.Bounds(minlon,minlat,maxlon,maxlat).transform(proj_EPSG4326, proj_map));
-                       var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
+               function panToLatLonBoundingBox(lat,lon,minlat,maxlat,minlon,maxlon,wkt) {
+                       vectorLayer.destroyFeatures();
+                       var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
+                       var proj_map = map.getProjectionObject();
+                       map.zoomToExtent(new OpenLayers.Bounds(minlon,minlat,maxlon,maxlat).transform(proj_EPSG4326, proj_map));
+                       var lonLat = new OpenLayers.LonLat(lon, lat).transform(proj_EPSG4326, proj_map);
                        map.panTo(lonLat, <?php echo $iZoom ?>);
 
-                        var pointList = [];
-                        var style = {
-                                strokeColor: "#75ADFF",
-                                fillColor: "#F0F7FF",
-                                strokeWidth: 2,
-                                strokeOpacity: 0.75,
-                                fillOpacity: 0.75
-                        };
-                        var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
-                        var proj_map = map.getProjectionObject();
-                       if (points)
-                       {
-                               points.each(function(p){
-                                       pointList.push(new OpenLayers.Geometry.Point(p[0],p[1]));
-                                       });
-                               var linearRing = new OpenLayers.Geometry.LinearRing(pointList).transform(proj_EPSG4326, proj_map);;
-                               var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing]),null,style);
-                               vectorLayer.destroyFeatures();
-                               vectorLayer.addFeatures([polygonFeature]);
-                       }
-                       else
+                       if (wkt)
                        {
-                               var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
-                               var point = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);
-                               var pointFeature = new OpenLayers.Feature.Vector(point,null,style);
-                               vectorLayer.destroyFeatures();
-                               vectorLayer.addFeatures([pointFeature]);
+                               var freader = new OpenLayers.Format.WKT({
+                                               'internalProjection': proj_map,
+                                               'externalProjection': proj_EPSG4326
+                                               });
+
+                               var feature = freader.read(wkt);
+                               if (feature)
+                               {
+                                       feature.style = {
+                                                       strokeColor: "#75ADFF",
+                                                       fillColor: "#F0F7FF",
+                                                       strokeWidth: 2,
+                                                       strokeOpacity: 0.75,
+                                                       fillOpacity: 0.75,
+                                                       pointRadius: 100
+                    };
+                                       vectorLayer.addFeatures([feature]);
+                               }
                        }
                }
 
@@ -327,7 +321,7 @@ form{
                                        <td valign="center" style="width:400px;"><input id="q" name="q" value="<?php echo htmlspecialchars($sQuery); 
 ?>" style="width:270px;"><input type="text" id="viewbox" style="width:130px;" name="viewbox"></td>
                                        <td style="width:80px;"><input type="submit" value="Search"></td>
-<?php if (CONST_Search_AreaPolygons) { ?>                                      <td style="width:100px;"><input type="checkbox" value="1" name="polygon" <?php if ($bShowPolygons) echo "checked"; ?>> Highlight</td>
+<?php if (CONST_Search_AreaPolygons) { ?>                                      <td style="width:100px;"><input type="checkbox" value="1" name="polygon" <?php if ($bAsText) echo "checked"; ?>> Highlight</td>
 <td style="text-align:right;">Data: <?php echo $sDataDate; ?></td>
 <td style="text-align:right;">
 <a href="http://wiki.openstreetmap.org/wiki/Nominatim" target="_blank">Documentation</a> | <a href="http://wiki.openstreetmap.org/wiki/Nominatim/FAQ" 
@@ -359,8 +353,8 @@ target="_blank">FAQ</a></td>
                        echo ', '.$aResult['aBoundingBox'][1];
                        echo ', '.$aResult['aBoundingBox'][2];
                        echo ', '.$aResult['aBoundingBox'][3];
-                       if (isset($aResult['aPolyPoints'])) echo ', '.json_encode($aResult['aPolyPoints']);
-                       echo ');\'>';
+                       if (isset($aResult['astext'])) echo ', "'.$aResult['astext'].'"';
+                       echo ");'>\n";
                }
                elseif (isset($aResult['zoom']))
                {
@@ -451,11 +445,7 @@ init();
                        echo ', '.$aResult['aBoundingBox'][1];
                        echo ', '.$aResult['aBoundingBox'][2];
                        echo ', '.$aResult['aBoundingBox'][3];
-                       if (isset($aResult['aPolyPoints']))
-                       {
-                               echo ', ';
-                               echo javascript_renderData($aResult['aPolyPoints']);
-                       }
+                       if (isset($aResult['astext'])) echo ", '".$aResult['astext']."'";
                        echo ');'."\n";
                }
                else
index 3272aff3cb4d5e21d34b6c886b996b2b56eddf90..d0b183eab3c44c4722959d732e12d124d336a9ce 100755 (executable)
 
        // Show / use polygons
        $bShowPolygons = (boolean)isset($_GET['polygon']) && $_GET['polygon'];
-       $bAsGeoJSON = (boolean)isset($_GET['polygon_geojson']) && $_GET['polygon_geojson'];
-       $bAsKML = (boolean)isset($_GET['polygon_kml']) && $_GET['polygon_kml'];
-       $bAsSVG = (boolean)isset($_GET['polygon_svg']) && $_GET['polygon_svg'];
-       $bAsText = (boolean)isset($_GET['polygon_text']) && $_GET['polygon_text'];
-       if ((($bShowPolygons?1:0)  
-          + ($bAsGeoJSON?1:0) 
-          + ($bAsKML?1:0) 
-          + ($bAsSVG?1:0) 
-          + ($bAsText?1:0) 
-               ) > CONST_PolygonOutput_MaximumTypes) {
-               if (CONST_PolygonOutput_MaximumTypes) {
-                       userError("Select only ".CONST_PolygonOutput_MaximumTypes." polgyon output option");
-               } else {
-                       userError("Polygon output is disabled");
+    if ($sOutputFormat == 'html') {
+               $bAsText = $bShowPolygons;
+               $bShowPolygons = false;
+               $bAsGeoJSON = false;
+               $bAsKML = false;
+               $bAsSVG = false;
+       } else {
+               $bAsGeoJSON = (boolean)isset($_GET['polygon_geojson']) && $_GET['polygon_geojson'];
+               $bAsKML = (boolean)isset($_GET['polygon_kml']) && $_GET['polygon_kml'];
+               $bAsSVG = (boolean)isset($_GET['polygon_svg']) && $_GET['polygon_svg'];
+               $bAsText = (boolean)isset($_GET['polygon_text']) && $_GET['polygon_text'];
+               if ((($bShowPolygons?1:0)
+                  + ($bAsGeoJSON?1:0)
+                  + ($bAsKML?1:0)
+                  + ($bAsSVG?1:0)
+                  + ($bAsText?1:0)
+                       ) > CONST_PolygonOutput_MaximumTypes) {
+                       if (CONST_PolygonOutput_MaximumTypes) {
+                               userError("Select only ".CONST_PolygonOutput_MaximumTypes." polgyon output option");
+                       } else {
+                               userError("Polygon output is disabled");
+                       }
+                       exit;
                }
-               exit;
        }
 
        // Show address breakdown
                        if ($bAsGeoJSON) $sSQL .= ",ST_AsGeoJSON(geometry) as asgeojson";
                        if ($bAsKML) $sSQL .= ",ST_AsKML(geometry) as askml";
                        if ($bAsSVG) $sSQL .= ",ST_AsSVG(geometry) as assvg";
-                       if ($bAsText) $sSQL .= ",ST_AsText(geometry) as astext";
-                       if ($bShowPolygons) $sSQL .= ",ST_AsText(geometry) as outlinestring";
+                       if ($bAsText || $bShowPolygons) $sSQL .= ",ST_AsText(geometry) as astext";
                        $sSQL .= " from placex where place_id = ".$aResult['place_id'].' and st_geometrytype(Box2D(geometry)) = \'ST_Polygon\'';
                        $aPointPolygon = $oDB->getRow($sSQL);
                        if (PEAR::IsError($aPointPolygon))
                                if ($bShowPolygons) 
                                {
                                        // Translate geometary string to point array
-                                       if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch))
+                                       if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#',$aPointPolygon['astext'],$aMatch))
                                        {
                                                preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/',$aMatch[1],$aPolyPoints,PREG_SET_ORDER);
                                        }
-                                       elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch))
+                                       elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#',$aPointPolygon['astext'],$aMatch))
                                        {
                                                preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/',$aMatch[1],$aPolyPoints,PREG_SET_ORDER);
                                        }
-                                       elseif (preg_match('#POINT\\((-?[0-9.]+) (-?[0-9.]+)\\)#',$aPointPolygon['outlinestring'],$aMatch))
+                                       elseif (preg_match('#POINT\\((-?[0-9.]+) (-?[0-9.]+)\\)#',$aPointPolygon['astext'],$aMatch))
                                        {
                                                $fRadius = 0.01;
                                                $iSteps = ($fRadius * 40000)^2;