7

こちらのLeafletのドキュメント:http://leafletjs.com/reference-1.2.0.html#circlemarkerは、CircleMakerがCircleを拡張し、半径がメートルではなくピクセルで指定されていることを除いて、同じことであると述べています。 、マップをズームしても円が一定のサイズのままになるようにします。

ただし、地図上に半径100mの円を描画しようとしているので、円は必要です。これを行うには、次のコードを使用します。

var geojsonLayer = new L.GeoJSON(null,{
pointToLayer: function (latlng){
    return new L.CircleMarker(latlng, {
        radius: 5,
        fillColor: "#ff7800",
        color: "#000",
        weight: 1,
        opacity: 1,
        fillOpacity: 0.8,
    });
}});

map.addLayer(osm);
map.addLayer(geojsonLayer);
geojsonLayer.addGeoJSON(jsonExample);

これは完全に機能しますが、CircleMakerの代わりに「Circle」を使用するようにコードを変更すると、マップ全体の読み込みに失敗し、javascriptエラーが発生します。

Error: Error: Invalid LatLng object: (56.229917, NaN)

geojsonを事前にフィルタリングして、緯度と経度の両方が不足しているポイントを削除することでこれを修正できますが、混乱しています。CircleとCircleMakerはどちらも、中心点の仕様としてLatLngオブジェクトを使用するように指定しています。特定のLatLngオブジェクトがCircleMarkerの中心点として有効であるが、Circleの中心点として使用されている場合は無効である方法を取得できません。

私は明らかな何かを見落としていますか、それともこれは私が回避しなければならないリーフレットの弱点やバグですか?

4

3 に答える 3

4

L.circleのleaflet.jsの_getLngRadius()メソッドを変更することでこれを修正しました。リーフレットバージョン0.4.4では、4913行目あたりです。

この方法は、円の半径を動的に計算するため、circleMarkerの方法とは異なります。あなたが持っている行を変更した場合

this._mRadius / hLength

this._mRadius.radius / hLength

大丈夫なはずです。

于 2012-10-11T13:27:03.377 に答える
4

もうコードに問題はありません。コンストラクターが異なるため、これと同じ問題が簡単に発生する可能性があります。

L.CircleMarker( <LatLng> latlng, <Path options> options? )

L.Circle( <LatLng> latlng, <Number> radius, <Path options> options? )

新しいサークルに必ず半径を渡してください。

于 2013-06-24T13:12:15.033 に答える
1

関数 (latlng) の先頭に if(latlng && latlng.lat && latlng.lng) を追加できます。

障害のあるデータを無視します。

于 2012-09-10T11:27:29.003 に答える