3

最近、私はopenlayersとopenstreetmapの作業を始めました。私がやりたいのは、線を引き、そこから経度と緯度から最も近い始点と終点の場所を取得することです。ポイントの経度と緯度を取得できます。以下はそのスクリプトです。

    <script type="text/javascript">
    var map, layer;
    function init(){
        var
        map = new OpenLayers.Map("map");
        layer = new OpenLayers.Layer.OSM( "Simple OSM Map");

        // allow testing of specific renderers via "?renderer=Canvas", etc
        var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
        renderer = (renderer) ? [renderer]:OpenLayers.Layer.Vector.prototype.renderers;

        var vectors = new OpenLayers.Layer.Vector("Vector Layer", {
            renderers: renderer
        });
        vectors.events.on({
            'featureselected': function(feature) {
                $('counter').innerHTML = this.selectedFeatures.length;
            },
            'featureunselected': function(feature) {
                $('counter').innerHTML = this.selectedFeatures.length;
            }
        });

        map.addLayers([layer, vectors]);

        line =  new OpenLayers.Control.DrawFeature(
                vectors, OpenLayers.Handler.Path
           );

       line.events.register('featureadded', line, handleMapClick);

        map.addControl(line);

         map.setCenter(
            new OpenLayers.LonLat(-71.147, 42.472).transform(
                new OpenLayers.Projection("EPSG:4326"),
                map.getProjectionObject()
            ), 15
        ); 
    }

  function handleMapClick(evt)
  {
  // create a WKT reader/parser/writer          
  var wkt = new OpenLayers.Format.WKT();

   // write out the feature's geometry in WKT format
   var out = wkt.write(evt.feature);
   alert(out);
  } 

しかし、最寄りの場所を取得できません。

4

1 に答える 1

1

Overpass_APIを使用して、行の BBox 内のすべての場所を取得できます (バッファリングできます)。ラインが長すぎる場合は、(OL を使用して) ラインをバッファリングし、[ポリゴン別] 選択を使用して、(できれば) 最も近いものを取得するための小さなセットを取得できます。

于 2015-04-23T09:51:22.683 に答える