私はpostgres/postgisとasp.netをGoogle Maps API v3に接続されたc#で使用しているプロジェクトに取り組んでいます。
私の問題は、マップ上のデータベースからの関心のある場所などの空間データを表示できるようにしたいということです。
postgis から .kml のような形式に変換するライブラリはありますか?
私はpostgres/postgisとasp.netをGoogle Maps API v3に接続されたc#で使用しているプロジェクトに取り組んでいます。
私の問題は、マップ上のデータベースからの関心のある場所などの空間データを表示できるようにしたいということです。
postgis から .kml のような形式に変換するライブラリはありますか?
PostGISの関数用のas_kmldocというラッパーがありST_AsKML
ます。試してみてください。それほど洗練されていませんが、ニーズに合う可能性があります。
SELECT as_kmldoc(osgb_location, NAME, code) FROM wunderground_stations;
ST_AsKML を使用できますが、そのデータを使用して KML 文字列を作成する必要があります。これは、mysql データベースからワールド境界を使用して kml を作成する完全な関数 (php) です。
public function generateWorld() {
$tolerance = 20000;
$select = $this->_db->select()
->from ( array( 'w' => 'world_borders'),
array ('cat', 'cntry_name', 'geom' => "ST_AsKML(transform(ST_SimplifyPreserveTopology(transform(w.the_geom, 2249), " . $tolerance . "),4326))"));
$result = $this->_db->fetchAll($select);
$countriesByCat = array();
foreach ($result as $r) {
if ($countriesByCat[$r['cat']] === null) $countriesByCat[$r['cat']] = array();
array_push($countriesByCat[$r['cat']], $r);
}
$kml = '<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<name>borders</name>';
for($i = 0; $i < count($countriesByCat); $i++) {
$kml .= '<Placemark><name>'.$countriesByCat[$i][0]['cntry_name'].'</name>';
if (count($countriesByCat[$i]) > 1) {
$kml .= '<MultiGeometry>';
foreach ($countriesByCat[$i] as $geom) {
$kml .= $geom['geom'];
}
$kml .= '</MultiGeometry>';
}
else {
$kml .= $countriesByCat[$i][0]['geom'];
}
$kml .= '</Placemark>';
}
$kml .= '</Document></kml>';
echo $kml;
}