superedit-SYNC_GIS_GEOPORTAL_IMPORT.php 4.7 KB

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