superedit-SYNC_GIS_GEOPORTAL_IMPORT_G2_GO_WFS.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. //
  3. // synchronizacja do serwera postgres GIS
  4. //
  5. include_once('se-lib/DB_Dump.php');
  6. include_once('se-lib/UsersHelper.php');
  7. set_time_limit(360);
  8. function get_data($url) {
  9. $ch = curl_init();
  10. $timeout = 5;
  11. $User_Agent = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31';
  12. $request_headers = array();
  13. $request_headers[] = 'User-Agent: '. $User_Agent;
  14. $request_headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  15. curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
  16. curl_setopt($ch, CURLOPT_URL, $url);
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  18. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  19. $data = curl_exec($ch);
  20. $error=curl_error ( $ch);
  21. echo $error;
  22. curl_close($ch);
  23. return $data;
  24. }
  25. function SYNC_GIS_GEOPORTAL_IMPORT_G2_GO_WFS() {
  26. global $db,$gdb;
  27. $mysql_zas_id=36;
  28. $gis_zas_id=13102;
  29. $sql_cr="";
  30. $db = DB::getDB();
  31. $gdb= DB::getDB($gis_zas_id);
  32. $tbl_dest="WFS_DzKat_G2_GO_WFS";
  33. DEBUG_S(-3,'db',$db);
  34. DEBUG_S(-3,'gis',$gdb);
  35. // http://sdi.geoportal.gov.pl/wfs_dzkat/wfservice.aspx?service=wfs&request=getfeature&bbox=50.855,20.695,50.911,20.805&version=1.1.0&typename=Dzialki&srsname=EPSG:4326
  36. //2014-06-05 http://sdi.geoportal.gov.pl/wfs_dzkat/wfservice.aspx?request=getfeature&version=1.1.0&service=wfs&typename=Dzialki&srsName=EPSG:4326&bbox=21.1,52.6,21.2,52.7
  37. $url="http://sdi.geoportal.gov.pl/wfs_dzkat/wfservice.aspx?request=getFeature&version=1.1.0&service=WFS&typename=gmgml:";
  38. $url="http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_GO_WFS/MapServer/WFSServer?service=wfs&request=getFeature&service=service=WFS";
  39. $layers[]='G2_GO_WFS:Dzialki';
  40. $srsName='EPSG:4326';
  41. //$bbox_y0=51.00; //dol
  42. //$bbox_x0=21.00; //lewo
  43. //$bbox_y1=52.14; //gora
  44. //$bbox_x1=22.83;//prawo
  45. //$step_y=0.01;
  46. //$step_x=0.01;
  47. //dla gdanska
  48. $bbox_x0=54.21; //dol
  49. $bbox_y0=18.41; //lewo
  50. $bbox_x1=54.28;//gora
  51. $bbox_y1=18.55; //prawo
  52. $step_y=0.01;
  53. $step_x=0.01;
  54. /*
  55. $srsName='EPSG:2180';
  56. $bbox_y0=378316; //dol
  57. $bbox_x0=423036; //lewo
  58. $bbox_y1=379316; //gora
  59. $bbox_x1=424036;//prawo
  60. $step_y=50;
  61. $step_x=50;
  62. */
  63. //lg=174213,770680,,876438,108559
  64. //<gml:lowerCorner>49.0023866380461 14.1229300045899</gml:lowerCorner>
  65. //<gml:upperCorner>54.8357888684533 24.1457361773594</gml:upperCorner>
  66. //EPSG:2180 378316,423036
  67. //54.13000,18.3156,54.3226,18.5427
  68. foreach($layers as $layer) {
  69. for($y=$bbox_y0;$y<=$bbox_y1;$y=$y+$step_y) {
  70. for($x=$bbox_x0;$x<=$bbox_x1;$x=$x+$step_x) {
  71. $url_get=$url."&typename=".$layer.'&srsName='.$srsName.'&bbox='.$y.','.$x.','.($y+$step_y).','.($x+$step_x);
  72. echo "<br>".$url_get;
  73. //break 2 ;
  74. echo "<br> bede jechac ".$url_get;
  75. $xml_=get_data($url_get);
  76. //$xmlarray = array(); // this will hold the flattened data
  77. $element = simplexml_load_string($xml_);
  78. $element->registerXPathNamespace('G2_GO_WFS', 'http://mapy.geoportal.gov.pl:80/wss/service/pub/guest/G2_GO_WFS/MapServer/WFSServer');
  79. $element->registerXPathNamespace('gml', 'http://www.opengis.net/gml');
  80. $element->registerXPathNamespace('wfs', 'http://www.opengis.net/wfs');
  81. //$element->registerXPathNamespace('p', 'http://example.org');
  82. // $positions = $element->xpath('/wfs:FeatureCollection[1]/gml:featureMember/gmgml:Dzialki');
  83. $positions = $element->xpath('/wfs:FeatureCollection[1]/gml:featureMember');
  84. DEBUG_S(-3,'Element positions',$positions,__FILE__,__FUNCTION__,__LINE__);
  85. //$count[]=$positions->count();
  86. $i=0;
  87. foreach ($positions as $pos) {
  88. // $pos_id = $element->xpath('/wfs:FeatureCollection/gml:featureMember/G2_GO_WFS:Dzialki[@gml:id="F324__22282165"]/G2_GO_WFS:OBJECTID');
  89. /* $pos_id = $element->xpath('/wfs:FeatureCollection/gml:featureMember/G2_GO_WFS:Dzialki[@gml:id="F324__22458175"]/G2_GO_WFS:IDENTYFIKATOR');
  90. foreach($pos_id as $pos_id_) {
  91. echo "<br>136: ";
  92. print_r($pos_id_->__toString());
  93. }
  94. */
  95. $pos_ = $pos->xpath('./G2_GO_WFS:Dzialki/@gml:id');
  96. // DEBUG_S(-3,'pos_',$pos,__FILE__,__FUNCTION__,__LINE__);
  97. foreach ($pos_ as $ind_=>$pos__) {
  98. $seq[]=1;
  99. $exp[$i]['ID']=$pos__->__toString();
  100. /// $result[] = $pos__->__toString();
  101. $i++;
  102. }
  103. }
  104. DEBUG_S(-3,'Element exp',$exp,__FILE__,__FUNCTION__,__LINE__);
  105. $cols=array('IDENTYFIKATOR'=>'G2_GO_WFS:IDENTYFIKATOR','POWIERZCHNIA'=>'G2_GO_WFS:POWIERZCHNIA','posList'=>'G2_GO_WFS:SHAPE/gml:MultiSurface/gml:surfaceMember/gml:Polygon/gml:exterior/gml:LinearRing/gml:posList'); //todo jak zrobic atrubuty ? 'EPSG'=>'gmgml:GEOMETRIA_DEG/gml:Polygon@'
  106. foreach($cols as $column=>$xpath) {
  107. foreach($seq as $ind=>$val) {
  108. // echo "<br>Xpath test ".'/wfs:FeatureCollection/gml:featureMember/G2_GO_WFS:Dzialki[@gml:id="'.$exp[$ind]['ID'].'"]/'.$xpath;
  109. $pos1_=$element->xpath('/wfs:FeatureCollection/gml:featureMember/G2_GO_WFS:Dzialki[@gml:id="'.$exp[$ind]['ID'].'"]/'.$xpath);
  110. //echo "<br> exp[".$ind. "][".$column."]=";
  111. foreach($pos1_ as $pos1__) {
  112. $exp[$ind][$column]=$pos1__->__toString();
  113. // echo "DET: .. a string to ".$pos1__->__toString();
  114. }
  115. }
  116. }
  117. //var_dump($result);
  118. DEBUG_S(-3,'x',array($url_get,$xml_,$xml,$element,$result,$ind,$count,$exp),__FILE__,__FUNCTION__,__LINE__);
  119. foreach($exp as $exp_) {
  120. $WKT_a=explode(" ", $exp_['posList']);
  121. $y_=false;
  122. $WKT='';
  123. $WKT_=array();
  124. $i=0;
  125. foreach($WKT_a as $ref) {
  126. if(!$y_) $y_=$ref;
  127. else {
  128. $WKT_[]=$ref." ".$y_;
  129. $y_=false;
  130. }
  131. $i++;
  132. }
  133. $WKT=implode(",", $WKT_);
  134. //print_r($WKT);
  135. //$sql='delete from "'.$tbl_dest.'" where "REM_SYSTEM"=\''.$url.'\' and "REM_ID"=\''.$exp_['ID'].'\'';
  136. //$gdb->query($sql);
  137. //nie kasujemy istniejaych obiektow - TODO
  138. $sql='select "REM_ID" from "'.$tbl_dest.'" where "REM_SYSTEM"=\''.$url.'\' and "REM_ID"=\''.$exp_['ID'].'\' ';
  139. $res=$gdb->query($sql);
  140. if($gdb->count($res)<1) {
  141. $sql='insert into "'.$tbl_dest.'" ( "REM_SYSTEM","REM_ID","IDENTYFIKATOR","POWIERZCHNIA","posList","A_RECORD_CREATE_DATE" ) values
  142. (\''.$url.'\',\''.$exp_['ID'].'\',\''.$exp_['IDENTYFIKATOR'].'\' , \''.$exp_['POWIERZCHNIA'].'\',ST_GeomFromEWKT(\'SRID=4326;POLYGON(('.$WKT.'))\') ,now() )
  143. ';
  144. DEBUG_S(-3,"SQL",$sql,__FILE__,__FUNCTION__,__LINE__);
  145. $gdb->query($sql);
  146. } else echo " | Obj ".$exp_['ID']." already exists in DB";
  147. }
  148. unset($exp);
  149. unset($seq);
  150. // die();
  151. // die('test');
  152. }
  153. }
  154. flush();
  155. //break 2;
  156. }
  157. echo "<br> pojechalem";
  158. echo "</pre>";
  159. }