superedit-SYNC_GIS_GEOPORTAL_IMPORT.php 5.4 KB

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