]> git.openstreetmap.org Git - nominatim.git/commitdiff
Add options to output polygon in various formats: polygon_geojson=1&polygon_svg=1...
authorBrian Quinion <openstreetmap@brian.quinion.co.uk>
Tue, 6 Nov 2012 00:08:01 +0000 (00:08 +0000)
committerBrian Quinion <openstreetmap@brian.quinion.co.uk>
Tue, 6 Nov 2012 00:08:01 +0000 (00:08 +0000)
lib/template/search-json.php
lib/template/search-jsonv2.php
lib/template/search-xml.php
website/search.php

index 70e9e46bf9cc3dff34c9046aa16ed6d396d32b90..45272d3540dc822511148b3bd1b5bcfb6ef80075 100644 (file)
                        $aPlace['address'] = $aPointDetails['address'];
                 }
 
+                if (isset($aResult['asgeojson']))
+                {
+                        $aPlace['geojson'] = json_decode($aResult['asgeojson']);
+                }
+
+                if (isset($aResult['assvg']))
+                {
+                        $aPlace['svg'] = $aResult['assvg'];
+                }
+
+                if (isset($aResult['astext']))
+                {
+                        $aPlace['geotext'] = $aResult['astext'];
+                }
+
+               if (isset($aResult['askml']))
+               {
+                       $aPlace['geokml'] = $aResult['askml'];
+               }
+
                $aFilteredPlaces[] = $aPlace;
        }
 
index fa801ac497585ddfda7d7e9a7e0d2b5a16dd35fd..2b8c2c28d2e982e8ebbb0041cf6255345c37d333 100644 (file)
                        $aPlace['address'] = $aPointDetails['address'];
                 }
 
+                if (isset($aResult['asgeojson']))
+                {
+                       $aPlace['geojson'] = json_decode($aResult['asgeojson']);
+                }
+
+                if (isset($aResult['assvg']))
+                {
+                       $aPlace['svg'] = $aResult['assvg'];
+                }
+
+                if (isset($aResult['astext']))
+                {
+                        $aPlace['geotext'] = $aResult['astext'];
+                }
+
+                if (isset($aResult['askml']))
+                {
+                        $aPlace['geokml'] = $aResult['askml'];
+                }
+
                $aFilteredPlaces[] = $aPlace;
        }
 
-       javascript_renderData($aFilteredPlaces);
+       javascript_renderData($aFilteredPlaces, array('geojson'));
index 5ebfa2826c8e11c3edea9d0fad7e9a16cc058bfe..84e177750b020b7c919126517b1fdab4dfb8485f 100644 (file)
                        }
                }
 
+               if (isset($aResult['asgeojson']))
+               {
+                       echo ' geojson=\'';
+                       echo $aResult['asgeojson'];
+                       echo '\'';
+               }
+
+               if (isset($aResult['assvg']))
+               {
+                       echo ' geosvg=\'';
+                       echo $aResult['assvg'];
+                       echo '\'';
+               }
+
+               if (isset($aResult['astext']))
+               {
+                       echo ' geotext=\'';
+                       echo $aResult['astext'];
+                       echo '\'';
+               }
+
                if (isset($aResult['zoom']))
                {
                        echo " zoom='".$aResult['zoom']."'";
                        echo " icon='".htmlspecialchars($aResult['icon'], ENT_QUOTES)."'";
                }
 
-               if (isset($aResult['address']))
+               if (isset($aResult['address']) || isset($aResult['askml']))
                {
                        echo ">";
+               }
+
+               if (isset($aResult['askml']))
+               {
+                       echo "\n";
+                       echo $aResult['askml'];
+               }
+
+               if (isset($aResult['address']))
+               {
+                       echo "\n";
                        foreach($aResult['address'] as $sKey => $sValue)
                        {
                                $sKey = str_replace(' ','_',$sKey);
                                echo htmlspecialchars($sValue);
                                echo "</$sKey>";
                        }
+               }
 
+               if (isset($aResult['address']) || isset($aResult['askml']))
+               {
                        echo "</place>";
                }
                else
index 1d544df44be50752b2da40e8d6787f8e975cfa6f..e2ef1d3ca49f0a00743b3bbd8875c86938fb6972 100755 (executable)
        }
 
        // Show / use polygons
-       $bShowPolygons = isset($_GET['polygon']) && $_GET['polygon'];
+       $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'];
 
        // Show address breakdown
        $bShowAddressDetails = isset($_GET['addressdetails']) && $_GET['addressdetails'];
                        $sSQL = "select place_id,0 as numfeatures,st_area(geometry) as area,";
                        $sSQL .= "ST_Y(centroid) as centrelat,ST_X(centroid) as centrelon,";
                        $sSQL .= "ST_Y(ST_PointN(ST_ExteriorRing(Box2D(geometry)),4)) as minlat,ST_Y(ST_PointN(ST_ExteriorRing(Box2D(geometry)),2)) as maxlat,";
-                       $sSQL .= "ST_X(ST_PointN(ST_ExteriorRing(Box2D(geometry)),1)) as minlon,ST_X(ST_PointN(ST_ExteriorRing(Box2D(geometry)),3)) as maxlon,";
-                       $sSQL .= "ST_AsText(geometry) as outlinestring from placex where place_id = ".$aResult['place_id'].' and st_geometrytype(Box2D(geometry)) = \'ST_Polygon\'';
+                       $sSQL .= "ST_X(ST_PointN(ST_ExteriorRing(Box2D(geometry)),1)) as minlon,ST_X(ST_PointN(ST_ExteriorRing(Box2D(geometry)),3)) as maxlon";
+                       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";
+                       $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 ($aPointPolygon['place_id'])
                        {
+                               if ($bAsGeoJSON) $aResult['asgeojson'] = $aPointPolygon['asgeojson'];
+                               if ($bAsKML) $aResult['askml'] = $aPointPolygon['askml'];
+                               if ($bAsSVG) $aResult['assvg'] = $aPointPolygon['assvg'];
+                               if ($bAsText) $aResult['astext'] = $aPointPolygon['astext'];
+
                                if ($aPointPolygon['centrelon'] !== null && $aPointPolygon['centrelat'] !== null ) {
                                        $aResult['lat'] = $aPointPolygon['centrelat'];
                                        $aResult['lon'] = $aPointPolygon['centrelon'];
                                }
-                               // Translate geometary string to point array
-                               if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch))
-                               {
-                                       preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/',$aMatch[1],$aPolyPoints,PREG_SET_ORDER);
-                               }
-                               elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch))
+                               if ($bShowPolygons) 
                                {
-                                       preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/',$aMatch[1],$aPolyPoints,PREG_SET_ORDER);
-                               }
-                               elseif (preg_match('#POINT\\((-?[0-9.]+) (-?[0-9.]+)\\)#',$aPointPolygon['outlinestring'],$aMatch))
-                               {
-                                       $fRadius = 0.01;
-                                       $iSteps = ($fRadius * 40000)^2;
-                                       $fStepSize = (2*pi())/$iSteps;
-                                       $aPolyPoints = array();
-                                       for($f = 0; $f < 2*pi(); $f += $fStepSize)
+                                       // Translate geometary string to point array
+                                       if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch))
                                        {
-                                               $aPolyPoints[] = array('',$aMatch[1]+($fRadius*sin($f)),$aMatch[2]+($fRadius*cos($f)));
+                                               preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/',$aMatch[1],$aPolyPoints,PREG_SET_ORDER);
+                                       }
+                                       elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$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))
+                                       {
+                                               $fRadius = 0.01;
+                                               $iSteps = ($fRadius * 40000)^2;
+                                               $fStepSize = (2*pi())/$iSteps;
+                                               $aPolyPoints = array();
+                                               for($f = 0; $f < 2*pi(); $f += $fStepSize)
+                                               {
+                                                       $aPolyPoints[] = array('',$aMatch[1]+($fRadius*sin($f)),$aMatch[2]+($fRadius*cos($f)));
+                                               }
+                                               $aPointPolygon['minlat'] = $aPointPolygon['minlat'] - $fRadius;
+                                               $aPointPolygon['maxlat'] = $aPointPolygon['maxlat'] + $fRadius;
+                                               $aPointPolygon['minlon'] = $aPointPolygon['minlon'] - $fRadius;
+                                               $aPointPolygon['maxlon'] = $aPointPolygon['maxlon'] + $fRadius;
                                        }
-                                       $aPointPolygon['minlat'] = $aPointPolygon['minlat'] - $fRadius;
-                                       $aPointPolygon['maxlat'] = $aPointPolygon['maxlat'] + $fRadius;
-                                       $aPointPolygon['minlon'] = $aPointPolygon['minlon'] - $fRadius;
-                                       $aPointPolygon['maxlon'] = $aPointPolygon['maxlon'] + $fRadius;
                                }
 
                                // Output data suitable for display (points and a bounding box)