2013-05-10 18 views
9

でGoogleマップポリゴンにMySQLのからよく知られているテキスト(WKT)を変換する...私はしていますCLOBデータ・タイプはVARCHARSと行とこれらのジオメトリタイプの他、例えば:私はすべてネット上で検索し、私はhaventは、このための任意の解決策を見つけた...私は私のためにdoesntの仕事を見つけ、任意のソリューションをしているPHP

POLYGON((23.953261 37.733372,23.953623 37.733202,23.953572 37.733132,23.954075 37.732896,23.954126 37.732966,23.954550 37.732767,23.954566 37.732698,23.954467 37.732603,23.954258 37.732476,23.953007 37.733041 、23.953207 37.733372 37.733303,23.953261)、(23.953695 37.732771,23.954243 37.732524,23.954427 37.732635,23.954496 37.732702,23.954484 37.732757,23.954133 37.732921,23.954087 37.732859,23.953525 37.733122,23.953577 37.733192,23.953292 37.733326,23.953080 37.733050,23.953695 37.732771))

MULTIPOLYGON(((23.949134 37.734540,23.948811 37.734215,23.948775 37.734238,23.949077 37.734541,23.948689 37.734820,23.948809 37.734747,23.949134 37.734540))、((23.948536 37.734531,23.948449 37.734447,23.948414 37.734470,23.948472 37.734526,23.948420 37.734560,23.948449 37.734588,23.948536 37.734531)))

と外輪のない単純なポリゴン....

私がしたい: クエリmysqlの 解析データ、 は をJSとグーにそれらを描画するためにそれらを渡しますグレ地図。 これについてお手伝いしますか?

+0

http://gis.stackexchange.com/questions/33650/how-to-extract-lat-long-from-wkt-data and http://stackoverflow.com/questions/12368586/how-to-handle – kozer

+0

-wkt・データ・アンドロイド・インそして、あなたはこれらのソリューションでどのような問題を持っていましたか?それとも重複としてマークする必要がありますか? – geocodezip

+1

最初のものはマルチラインとポイントに、ポリゴンとマルチポリゴンには返されません。もう一つはjavaのためのものです。これらは私の問題のための最も近い記事です。また、私は同じことを求めている他の記事をstackoverflowで見つけました何でも答えはありません。私は一週間近く探していますが、この投稿は私の最後のチャンスです。これを行うための「明確な」方法はありません。:) – kozer

答えて

9

は、このように私には聞こえますが、単純に正しくこれらの文字列のうち、すべての座標のセットをプルする方法がわからないとして本当に正しい、ダウン正規表現の質問に来ますか?正規表現は、いくつかの私はここでしか実証しなければならないと理解してそれらについてグーグルで行い、ここではあなたの友達です。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>Some Title</title> 
</head> 
<body> 
<div id="map_canvas" style="width:800px; height:600px;"> 
</div> 
<?php 

$polyString1 = 'POLYGON((23.953261 37.733372,23.953623 37.733202,23.953572 37.733132,23.954075 37.732896,23.954126 37.732966,23.954550 37.732767,23.954566 37.732698,23.954467 37.732603,23.954258 37.732476,23.953007 37.733041,23.953207 37.733303,23.953261 37.733372),(23.953695 37.732771,23.954243 37.732524,23.954427 37.732635,23.954496 37.732702,23.954484 37.732757,23.954133 37.732921,23.954087 37.732859,23.953525 37.733122,23.953577 37.733192,23.953292 37.733326,23.953080 37.733050,23.953695 37.732771))'; 

$polyString2 = 'MULTIPOLYGON(((23.949134 37.734540,23.948811 37.734215,23.948775 37.734238,23.949077 37.734541,23.948689 37.734820,23.948809 37.734747,23.949134 37.734540)),((23.948536 37.734531,23.948449 37.734447,23.948414 37.734470,23.948472 37.734526,23.948420 37.734560,23.948449 37.734588,23.948536 37.734531)))'; 

echo '<script type="text/javascript">'; 
//note the quote styles below, Important! 
echo "var polys=['$polyString1','$polyString2'];"; 
echo '</script>'; 

?> 
<script src="https://maps.googleapis.com/maps/api/js?v=3&sensor=false"></script> 
<script type="text/javascript"> 

function parsePolyStrings(ps) { 
    var i, j, lat, lng, tmp, tmpArr, 
     arr = [], 
     //match '(' and ')' plus contents between them which contain anything other than '(' or ')' 
     m = ps.match(/\([^\(\)]+\)/g); 
    if (m !== null) { 
     for (i = 0; i < m.length; i++) { 
      //match all numeric strings 
      tmp = m[i].match(/-?\d+\.?\d*/g); 
      if (tmp !== null) { 
       //convert all the coordinate sets in tmp from strings to Numbers and convert to LatLng objects 
       for (j = 0, tmpArr = []; j < tmp.length; j+=2) { 
        lat = Number(tmp[j]); 
        lng = Number(tmp[j + 1]); 
        tmpArr.push(new google.maps.LatLng(lat, lng)); 
       } 
       arr.push(tmpArr); 
      } 
     } 
    } 
    //array of arrays of LatLng objects, or empty array 
    return arr; 
} 

function init() { 
    var i, tmp, 
     myOptions = { 
      zoom: 16, 
      center: new google.maps.LatLng(23.9511, 37.7337), 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }, 
     map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    for (i = 0; i < polys.length; i++) { 
     tmp = parsePolyStrings(polys[i]); 
     if (tmp.length) { 
      polys[i] = new google.maps.Polygon({ 
       paths : tmp, 
       strokeColor : '#FF0000', 
       strokeOpacity : 0.8, 
       strokeWeight : 2, 
       fillColor : '#FF0000', 
       fillOpacity : 0.35 
      }); 
      polys[i].setMap(map); 
     } 
    } 
} 

init(); 

</script> 
</body> 
</html> 
+0

ありがとう!!あなたの助けを借りて私は私が望んでいたことをすることができます! :) – kozer

+1

あなたの緯度と経度は解析時に反転されます(WKTは経度と緯度です)。 – geocodezip

1

@astupidnameはほとんど正しいですが、あなたをつまずかせる何かは、マッピングシステムは、緯度、経度を使用するのに対し、空間データベースは、経度、緯度を使用することです。したがって、WKT入力はx、y(経度、緯度)になります。

lat = Number(tmp[j]); 
lng = Number(tmp[j + 1]); 

lng = Number(tmp[j]); 
lat = Number(tmp[j + 1]); 
0

としてだけでなく、ウィケット(アーサーで述べたように)である必要があり、クライアント側のJavaScriptで、このようなよく知られているテキストを処理するもwellknown Mapboxからあります。

関連する問題