2

地図上に配置し、さまざまな半径の周りに円で表示する必要がある住所のリストがあります。

すべてのポイントをリストした KML ファイルがあり、KML 内に「半径」カスタム フィールドを追加して、カスタム フィールドに基づいて各ポイントの周りに円を描画できるようにしたいと考えています。

私は正しい軌道に乗っていますか、それともこれを行う簡単な方法はありますか?

4

2 に答える 2

3

KML Placemark の周りに円を描くことは非常に可能です。geoxml3 プロセッサを使用しました。 初め、

  • geoxml3 は Ajax を使用するため、ブラウザーからマップ HTML を開いてテストすることはできません。
  • 次のバージョンの geoxml3 をダウンロードすることをお勧めします

kmz ファイルと「network_link」には別のバージョンがあります。(私はこれらを試していません)。

悪いニュースがあります。カスタム タグを挿入して、geoxml3 でそれらを見つける方法はないと結論付けました。したがって、円の半径を可変にするには、その情報を「説明」タグに配置し、データを結合する場合は正規表現を使用して解析する必要があります。あまり適切でないオプションが他に 2 つあります。"Name" と "styleUrl" です。

これは私がまとめた簡単なページです。 https://files.nyu.edu/hc742/public/googlemaps/kmlcircle.html

JavaScript は次のようになります。重要な部分は、geoXml オプションで「createMarker」コールバック関数を定義することです。

  <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
  <script type="text/javascript" src="geoxml3.js"></script>
  <script type="text/javascript">
  var map;
  var geoXml = null;
  var mapOptions = { center: new google.maps.LatLng(39.370, -100.0), zoom: 5,
    mapTypeId: google.maps.MapTypeId.ROADMAP };

  function initialize() {
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
    geoXml = new geoXML3.parser({
      map: map, 
      createMarker: addCircle});

    geoXml.parse('https://files.nyu.edu/hc742/public/googlemaps/simple.kml')
  }


  function addCircle(placemark) {
    //rad = parseFloat(placemark.description);
    rad = parseFloat(placemark.styleUrl);
    marker = new google.maps.Marker({map:map, position:placemark.latlng});
    circle = new google.maps.Circle({map:map, center: placemark.latlng, radius: rad}); 
  }

  google.maps.event.addDomListener(window, 'load', initialize);
  </script>

この KML では:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
  <Document>
    <name>simple</name>
    <description>nothing</description>

    <Placemark>
      <name>simple</name>
      <description>2000</description>
      <styleUrl>8000</styleUrl>

      <Point>
        <coordinates>-122.0822035425683,37.42228990140251,1220</coordinates>
      </Point>
    </Placemark>

    <Placemark>
      <name>simple</name>
      <description>5001</description>
      <styleUrl>3000</styleUrl>
      <Point>
        <coordinates>-122.0822035425683,37.22228990140251,4330</coordinates>
      </Point>
    </Placemark>

    <Placemark>
      <name>C</name>
      <description>9001</description>
      <styleUrl>2000</styleUrl>

      <Point>
        <coordinates>-122.00000000001,37.000000000001,9001</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>
于 2012-04-08T17:23:14.617 に答える
2

住所の数によって異なります。KML ファイルのサイズが数メガの場合は、正しい方向に進んでいる可能性があります。ただし、Google Maps API の KmlLayer ではポイント内のデータに直接アクセスできないため、radius カスタム フィールドを追加する計画は機能しません。個々のポイントを住所としてレンダリングする方がよいようです。これらは役立つかもしれないいくつかの記事です: https://developers.google.com/maps/articles/toomanymarkers https://developers.google.com/maps/articles/phpsqlsearch_v3 https://developers.google.com/maps /articles/phpsqlgeocode

そして、その周りに円オブジェクトを作成します。

于 2012-04-08T07:39:57.530 に答える