2012-08-15 10 views
7

W dokumentacji do ulotek tutaj: http://leafletjs.com/reference-1.2.0.html#circlemarker mówi, że CircleMaker rozszerza Circle, i że jest to to samo, z wyjątkiem tego, że promień jest określony w pikselach zamiast w metrach, tak, że koła pozostają stały rozmiar, nawet jeśli powiększysz mapę.Ulotka: Koło zachowujące się inaczej niż CircleMarker

Potrzebuję jednak Kręgów, ponieważ próbuję narysować okręgi o promieniu 100 m na mapie. Aby to zrobić, należy użyć następującego kodu:

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); 

Działa to doskonale, jednak w przypadku zmiany kodu do korzystania z „Circle” zamiast circlemaker cała mapa nie zostaje wczytana, a pojawia się błąd javascript:

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

mogę rozwiązać ten problem poprzez wstępne filtrowanie GeoJSON usunąć te punkty, które nie dysponują zarówno długość i szerokość geograficzną, ale jestem zdezorientowany: Koło i circlemaker zarówno określić, że podejmują one długość i szerokość geograficzną-przedmiot specyfikacji centralnie, nie rozumiem, jak określony obiekt LatLng może być ważny jako punkt środkowy dla CircleMarker, ale nieważny, jeśli jest używany jako punkt środkowy okręgu.

Czy przeoczyłem coś oczywistego, czy jest to tylko słabość i/lub błąd w ulotce, którą będę musiał po prostu obejść?

Odpowiedz

4

Naprawiłem to, zmieniając metodę _letLngRadius() w pliku leaflet.js w kodzie L.circle. W wersji ulotkowej 0.4.4, jest to linia 4913.

Ta metoda różni się od tej w circleMarker, ponieważ dynamicznie oblicza promień okręgu. Jeśli zmienić linię, która ma

this._mRadius/hLength

do

this._mRadius.radius/hLength

powinno być OK.

+0

Awesome! Dziękuję Ci. Wydaje się to ogólnie warte, więc myślę, że ta łatka powinna zostać wysłana również do twórców ulotek. – Agrajag

+0

Co się z tym stało? –

+0

Każda aktualizacja w tej sprawie? – kuanb

1

Możesz dodać if (szerokość geograficzną miejsca położonego & & latlng.lat & & latlng.lng) na początku swojej funkcji (długość i szerokość geograficzną)

że zignoruje błędne dane teleadresowe.

+0

Tak, wiem, tak jak napisałem: wiem, że mogę filtrować, które punkty należy uwzględnić, aby uniknąć problemu. Nie chciałem tego unikać, ale żeby to zrozumieć. Nic w dokumentach nie wskazuje, że powinna istnieć jakakolwiek różnica między "Kręgiem" a "KołoMarker" w tym zakresie. – Agrajag

4

Nie ma już problemu z kodem. Choć ten sam problem może pojawić się łatwo z powodu różnych konstruktorów:

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

i

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

Pamiętaj, aby przejść promień do nowych środowisk.