[Mapbender-commits] r8715 - in trunk/mapbender/http: classes javascripts php

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Mon Oct 7 05:58:12 PDT 2013


Author: armin11
Date: 2013-10-07 05:58:02 -0700 (Mon, 07 Oct 2013)
New Revision: 8715

Modified:
   trunk/mapbender/http/classes/class_wfs.php
   trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_client.php
   trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_server.php
   trunk/mapbender/http/php/mod_wfs_gazetteer_server.php
Log:
Solve some problems in download gazetteer

Modified: trunk/mapbender/http/classes/class_wfs.php
===================================================================
--- trunk/mapbender/http/classes/class_wfs.php	2013-10-07 11:53:08 UTC (rev 8714)
+++ trunk/mapbender/http/classes/class_wfs.php	2013-10-07 12:58:02 UTC (rev 8715)
@@ -91,17 +91,22 @@
 		return null;
 	}
 	
-	protected function getFeatureGet ($featureTypeName, $filter) {
+	protected function getFeatureGet ($featureTypeName, $filter, $maxFeatures=null) {
 		$url = $this->getFeature .
 				$this->getConjunctionCharacter($this->getFeature) . 
 				"service=WFS&request=getFeature&version=" . 
-				$this->getVersion() . "&typename=" . $featureTypeName . 
-				"&filter=" . urlencode($filter);
-
+				$this->getVersion() . "&typename=" . $featureTypeName;
+		if ($maxFeatures != null) {
+			$url .= "&MAXFEATURES=".$maxFeatures;
+		}
+		if ($filter != null) {
+				$url .= "&filter=" . urlencode($filter);
+		}
+		$e = new mb_exception("class_wfs.php: url: ".$url);
 		return $this->get($url);
 	}
 	
-	protected function getFeaturePost ($featureTypeName, $filter, $destSrs, $storedQueryId, $storedQueryParams) {
+	protected function getFeaturePost ($featureTypeName, $filter, $destSrs, $storedQueryId, $storedQueryParams, $maxFeatures) {
 		if($storedQueryId && $storedQueryId != "") {
 			$postData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" .
 					"<wfs:GetFeature service=\"WFS\" version=\"" . $this->getVersion() . "\" " .
@@ -174,12 +179,25 @@
 			}
 		}
 		
-		$postData .= "</wfs:GetFeature>";		
-
-		return $this->post($this->getFeature, $postData);
+		$postData .= "</wfs:GetFeature>";	
+	        if ($filter == null) {
+			if ($maxFeatures != null) {
+				$e = new mb_exception("maxfeatures: ".$maxFeatures);
+				return $this->getFeatureGet($featureTypeName, null, $maxFeatures);
+			} else {
+				$e = new mb_exception("maxfeatures: ".$maxFeatures);
+				return $this->getFeatureGet($featureTypeName, null, null);
+			}
+		} else {
+			if (is_int($maxFeatures)) {
+				return $this->post($this->getFeature."&MAXFEATURES=".$maxFeatures, $postData);
+			} else {
+				return $this->post($this->getFeature, $postData);
+			}
+		}
 	}
 	
-	public function getFeature ($featureTypeName, $filter, $destSrs=null, $storedQueryId=null, $storedQueryParams=null) {
+	public function getFeature ($featureTypeName, $filter, $destSrs=null, $storedQueryId=null, $storedQueryParams=null,  $maxFeatures=null) {
 
 // FOR NOW, WE ONLY DO POST REQUESTS!
 // THE FILTERS ARE CONSTRUCTED ON THE CLIENT SIDE,
@@ -187,7 +205,7 @@
 // WOULD BE TOO MUCH FOR NOW
 //
 //		if (strpos($this->getFeature, "?") === false) {
-			return $this->getFeaturePost($featureTypeName, $filter, $destSrs, $storedQueryId, $storedQueryParams);
+			return $this->getFeaturePost($featureTypeName, $filter, $destSrs, $storedQueryId, $storedQueryParams, $maxFeatures);
 //		}
 //		return $this->getFeatureGet($featureTypeName, $filter);
 	}

Modified: trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_client.php
===================================================================
--- trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_client.php	2013-10-07 11:53:08 UTC (rev 8714)
+++ trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_client.php	2013-10-07 12:58:02 UTC (rev 8715)
@@ -758,7 +758,7 @@
 	
 	document.getElementById("progressWheel").innerHTML = "<table><tr><td><img src='../img/indicator_wheel.gif'></td><td>Get features...</td></tr></table>";
 		
-	var properties = {"command":"getFeature", "wfsFeatureTypeName":chosenLayer, "wfsGetFeatureAttr":chosenAttr, "wfsGetFeature":wfs_getfeature};
+	var properties = {"command":"getFeature", "wfsFeatureTypeName":chosenLayer, "wfsGetFeatureAttr":chosenAttr, "wfsGetFeature":wfs_getfeature,"wfs_conf_id":global_selectedWfsConfId,"destSrs":global_wfsConfObj[global_selectedWfsConfId].featuretype_srs};
 	parent.$.post("../javascripts/mod_wfsGazetteerEditor_server.php", properties, function (result, status) {		
 		if (status == "success") {
 		   var arrFeatureColumnValues = eval('(' + result + ')');
@@ -1388,7 +1388,7 @@
 
 
 	<div class='mainDiv' id='mainDiv' style="display:none">
-	<b><?php echo _mb("Set spatial filter"); ?></b>
+	<b><?php echo _mb("Set spatial filter"); ?></b><br>
 	<div name='displaySpatialButtons' id='displaySpatialButtons' style='width:180px'></div>
 	<input type="button" id="deleteRequestGeometry" name="deleteRequestGeometry" value="löschen" style="position:absolute;top:70px;left:120px;display:none">
 	<br><br>

Modified: trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_server.php
===================================================================
--- trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_server.php	2013-10-07 11:53:08 UTC (rev 8714)
+++ trunk/mapbender/http/javascripts/mod_wfsGazetteerEditor_server.php	2013-10-07 12:58:02 UTC (rev 8715)
@@ -24,9 +24,16 @@
 require_once(dirname(__FILE__)."/../classes/class_universal_wfs_factory.php");
 require_once(dirname(__FILE__)."/../classes/class_universal_gml_factory.php");
 require_once(dirname(__FILE__)."/../classes/class_wfs_configuration.php");
+require_once(dirname(__FILE__)."/../extensions/JSON.php"); 
 
 $user = new User(Mapbender::session()->get("mb_user_id"));
 $command = $_REQUEST["command"];
+$wfsFeatureTypeName = $_REQUEST["wfsFeatureTypeName"]; 
+#$wfsDescribeFeatureType = $_REQUEST["wfsDescribeFeatureType"]; 
+$wfsGetFeatureAttr = $_REQUEST["wfsGetFeatureAttr"]; 
+$wfsGetFeature = $_REQUEST["wfsGetFeature"]; 
+$wfsFilter = $_REQUEST["wfsFilter"]; 
+$exportToShape = $_REQUEST["exportToShape"] == "true" ? true : false; 
 
 function toShape ($filenamePrefix, $geoJson, $destSrs) {
 	$srsArray = explode(":", $destSrs);
@@ -35,7 +42,7 @@
 	$unique = TMPDIR . "/" . $filenamePrefix;
 	file_put_contents($unique.".json",$geoJson);
 	
-	if(OGR2OGR_PATH) {
+	if(defined("OGR2OGR_PATH")) {
 		$pathOgr = OGR2OGR_PATH;
 	}
 	else {
@@ -161,7 +168,7 @@
 	
 	$myWfsFactory = new UniversalWfsFactory();
 	$myWfs = $myWfsFactory->createFromDb($wfsId);
-	$data = $myWfs->getFeature($typename, $filter,$destSrs, $storedQueryId, $storedQueryParams);
+	$data = $myWfs->getFeature($typename, $filter,$destSrs, $storedQueryId, $storedQueryParams, null);
 	
 	#new mb_exception($data);
 	
@@ -194,80 +201,41 @@
 	}
 }
 else if($command == "getFeature"){
-
+	//copied from above
+	$wfs_conf_id = $_REQUEST["wfs_conf_id"];
+	$destSrs = $_REQUEST["destSrs"];
+	$wfsConf = WfsConfiguration::createFromDb($wfs_conf_id);
+	if (is_null($wfsConf)) {
+		sendErrorMessage("Invalid WFS conf: " . $wfs_conf_id); //TODO - sendErrorMessage - locate where it is declared!
+	}
 	$admin = new administration();
-	$wfsGetFeature=$admin->checkURL($wfsGetFeature);
-
-	$url = $wfsGetFeature."REQUEST=getFeature&VERSION=1.0.0&SERVICE=WFS&MAXFEATURES=20".
-		   "&typename=".$wfsFeatureTypeName; //."&propertyname=".$wfsGetFeatureAttr;
-		   //"&filter=<ogc:Filter><ogc:Not><ogc:PropertyIsNull><ogc:PropertyName>".$wfsGetFeatureAttr."</ogc:PropertyName></ogc:PropertyIsNull></ogc:Not></ogc:Filter>";
-	
-	#echo $url;
-	$e = new mb_exception("URL: " . $url);
-	$x = new connector($url);
-	$data = $x->file;
-	//$data = file_get_contents($url);
-	$parser = xml_parser_create();
-	xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
-	xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
-	xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,"UTF-8");
-	xml_parse_into_struct($parser,$data,$values,$tags);
-	
-	$code = xml_get_error_code($parser);
-	xml_parser_free($parser);
-	
-	if ($code) {
-		$line = xml_get_current_line_number($parser); 
-		$mb_exception = new mb_exception(xml_error_string($code) .  " in line " . $line);
+	$wfsId = $wfsConf->wfsId;
+	$filter = null;
+	$myWfsFactory = new UniversalWfsFactory();
+	$myWfs = $myWfsFactory->createFromDb($wfsId);
+	$data = $myWfs->getFeature($wfsFeatureTypeName, null, $destSrs, null, null, 20);
+	if ($data === null) die('{}');
+	if (defined("WFS_RESPONSE_SIZE_LIMIT") && WFS_RESPONSE_SIZE_LIMIT < strlen($data)) {
+		die("Too many results, please restrict your search.");
 	}
-	
-	
-	function sepNameSpace($s){
-		$c = mb_strpos($s,":"); 
-		if($c>0){
-			return mb_substr($s,$c+1);
+	$gmlFactory = new UniversalGmlFactory();
+	$myGml = $gmlFactory->createFromXml($data, $wfsConf);
+	if (!is_null($myGml)) {
+		$geoJson = $myGml->toGeoJSON();
+		//parse attribute objects
+		$featureValuesArray = array();
+		$geoObj = json_decode($geoJson);
+		foreach($geoObj->features as $feature) {
+			array_push($featureValuesArray, $feature->properties->{$wfsGetFeatureAttr});
 		}
-		else{
-			return $s;
-		}		
+		$json = new Services_JSON();
+		echo $json->encode($featureValuesArray);	
 	}
-	
-	$featureNameToUpper = mb_strtoupper($wfsGetFeatureAttr);
-	$featureValuesArray = array();
-	foreach ($values as $element) {
-		if(mb_strtoupper($element[tag]) == $featureNameToUpper || sepNameSpace(mb_strtoupper($element[tag])) == $featureNameToUpper){
-			array_push($featureValuesArray, $element[value]);
-		}
+	else {
+		$geoJson = "{}";
+		header("Content-type:application/x-json; charset=utf-8");
+		echo $geoJson;
 	}
-	
-//	$featureValues = join("|", $featureValuesArray);	
-	$json = new Services_JSON();
-	echo $json->encode($featureValuesArray);	
-	
-// the way below only works with propertyname in REQUEST-Url	
-//	$sxe = new SimpleXMLElement($data);
-//	
-//	list($ns, $ns_url) = explode(":", $wfsFeatureTypeName);
-//	
-//	$sxe->registerXPathNamespace($ns, 'http://namespace_url_default');
-//	
-//	$m = array();
-//	$m['columnValues'] = $sxe->xpath('//'.$ns.':'.$wfsGetFeatureAttr);
-//	 
-//	$columnValues = array();
-//	$i=0;
-//	foreach ($m['columnValues'] as $columnValue) {
-//		
-//		$domNode = dom_import_simplexml($columnValue);    
-//	    $columnValues[$i]=$domNode->nodeValue;
-//	    
-//	    $i++;
-//	    
-//	    $json = new Services_Json();
-//		$jsonEncodedValue = $json->encode($columnValues);	
-//	}
-	
-//	echo $jsonEncodedValue;
 }
 else {
 	echo "please enter a valid command.";

Modified: trunk/mapbender/http/php/mod_wfs_gazetteer_server.php
===================================================================
--- trunk/mapbender/http/php/mod_wfs_gazetteer_server.php	2013-10-07 11:53:08 UTC (rev 8714)
+++ trunk/mapbender/http/php/mod_wfs_gazetteer_server.php	2013-10-07 12:58:02 UTC (rev 8715)
@@ -147,7 +147,7 @@
 
 	$myWfsFactory = new UniversalWfsFactory();
 	$myWfs = $myWfsFactory->createFromDb($wfsId);
-	$data = $myWfs->getFeature($typename, $filter,$destSrs, $storedQueryId, $storedQueryParams);
+	$data = $myWfs->getFeature($typename, $filter,$destSrs, $storedQueryId, $storedQueryParams, null);
 	
 	#new mb_exception($data);
 	



More information about the Mapbender_commits mailing list