2016-04-11 37 views
2

Mapbox'ta çakışan daireler yapmanın bir yolu aynı rengi gösterir ve yalnızca dış kenar ekranının etrafındaki kenarlığa sahip mi?Mapbox Çakışan Daireler

bu var: enter image description here

Ve ben istediğim için photoshop bu yaptı: enter image description here

+0

Bu görünüyor. Örnek bir haritaya bağlantınız var mı? – Armstrongest

+0

Bu gönderiye başlamak isteyebilirsiniz: http://stackoverflow.com/questions/24056782/ios-parse-geopoints-mapbox-shapes ve bu bağlantı: http://mathworld.wolfram.com/Circle-CircleIntersection.html – Armstrongest

+0

Ayrıca bkz. [Bu yanıt] (http://stackoverflow.com/a/35407512/5403120). [Leaflet Geodesy] (https://github.com/mapbox/leaflet-geodesy) ile puanlarınız etrafında GeoJSON çevreleri oluşturursanız, [Turf.js] ile bir birlik yapın (http://turfjs.org/), çakışan tüm çevrelerin etrafında tek bir kenarlık olacak. – nathansnider

cevap

1

Onların grubu göstermek için tüm çevrelerin stil bir yolu yoktur sanmıyorum iken anahatta, tüm çember geometrilerinin birleşimini oluşturarak ve stilinizi buna uygulayarak istediğiniz efekti elde edebilirsiniz. Ne yazık ki, Leaflet'in L.circle class bir dairenin geometrisine merkez noktasının ötesine erişmenin bir yolunu sunmaz ve bir birlik gerçekleştirmek için dairenin kendi yoluna ihtiyacınız vardır. Neyse ki, Leaflet Geodesy ve LGeo.circle sınıfı vardır; bu, belirli bir yarıçapa ve parça sayısına sahip dairesel çokgenler üretir. Çevrelerinizin bu çokgen gösterimlerini aldıktan sonra, istediğiniz anahatları oluşturmak için turf.union kullanabilirsiniz.

Eğer pointLayer adı noktaları bir tabaka ile başlayan ki (bu L.geoJson, L.mapbox.featureLayer veya .eachLayer method devralır başka sınıfı olabilir). Daha sonra bunların her biri için bir dairesel çokgen oluştururken ve bu gibi geçici katman grubuna eklenmesi, özellikleri adımlayabilirsiniz:

var circleLayer = L.layerGroup(); 
var radius = 5000 
var opts = { 
    parts: 144 
}; 
pointLayer.eachLayer(function(layer) { 
    LGeo.circle(layer.getLatLng(), radius, opts).addTo(circleLayer); 
}); 

radius metre olup parts seçenek segment sayısı nerede olduğunu Poligonlarınızın sahip olmasını istersiniz. Daha sonra, geçici gruptaki tüm katmanları dizisini almak için .getLayers yöntemini kullanın sonra tüm özelliklerinden bir birlik yaratmak için üzerinde yineleme:

var circleUnion = unify(circleLayer.getLayers()).addTo(map); 

function unify(polyList) { 
    for (var i = 0; i < polyList.length; ++i) { 
    if (i == 0) { 
     var unionTemp = polyList[i].toGeoJSON(); 
    } else { 
     unionTemp = turf.union(unionTemp, polyList[i].toGeoJSON()); 
    } 
    } 
    return L.geoJson(unionTemp, {style: unionStyle}); 
} 

unionStyle Eğer uygulamak istediğiniz ne olursa olsun tarzıdır senin yeni kombine çevreler. İşte bazı rasgele veri ile tüm bu gösteren bir örnek keman olduğunu: bu eğlenceli (ve zorlu) Sorun çözmeye olacak gibi

http://fiddle.jshell.net/nathansnider/L2d626hn/

+0

Teşekkürler Nathan. Yorumunu araştırdım ve işe koyuldum. Ben sadece bunu cevap olarak yazman için sana mesaj verecektim ama sen beni dövüyordun. Jeodeziye işaret ettiğiniz için tekrar teşekkürler. – Lereveme