这个问题是针对Leaflet用户(以及使用Leaflet.draw插件的用户)...
我正在使用Leaflet,并希望允许我的用户在地图的任何区域上绘制1 - 且仅1 - 单个多边形.我还想以某种方式限制该多边形的大小(例如限制正方形的边长或覆盖它的区域 - 最好用度数指定,这样无论缩放如何都会转换设置的大小限制水平).
我的最终目标是简单地提取4个方形顶点的坐标或多边形区域覆盖的坐标.
也就是说,我找到了Leaflet.Draw插件.这很棒,但是,我需要将其功能限制在我的要求之内(一次只绘制1个多边形,特别是不能将尺寸绘制得太大).这可能吗?如果是这样,怎么样?
无论是否可能,有没有更好的方法来做这件事?
我正在使用angular-leaflet指令,我想知道我的标记对象数组中的哪个标记被点击了.我知道有一些方法可以获得类似于中心的双向属性,但是对于选定的标记.
我正在尝试使用rCharts包显示R的地图.我开始简单,所以我想在地图上添加一个多边形.但我不知道如何.有任何想法吗?addPolygon不起作用.
map <- Leaflet$new()
map$tileLayer(provider = 'Stamen.TonerLite')
map$setView(c(48.1, 16.7), zoom = 10)
map$addPolygon(
c(48.99831, 49.08815, 49.08815, 48.99831, 48.99831),
c(13.42666, 13.42666, 13.56383, 13.56358, 13.42666),
layerId=c("1"),
options=opts,
defaultOptions=opts)
map
Run Code Online (Sandbox Code Playgroud) 我创建了一个交互式地图如下:
library(leafletR)
data(quakes)
# store data in GeoJSON file (just a subset here)
q.dat <- toGeoJSON(data=quakes[1:99,], dest=tempdir(), name="quakes")
# make style based on quake magnitude
q.style <- styleGrad(prop="mag", breaks=seq(4, 6.5, by=0.5), style.val=rev(heat.colors(5)), leg="Richter Magnitude", fill.alpha=0.7, rad=8)
# create map
q.map <- leaflet(data=q.dat, dest=tempdir(), title="Fiji Earthquakes", base.map="osm", style=q.style, popup="mag")
# view map in browser
rstudio::viewer(q.map)
Run Code Online (Sandbox Code Playgroud)
现在,我想让圆的大小依赖于另一个变量.让我们说变量'station'.我怎样才能做到这一点?如果这个包不可能,我打开使用另一个包...只要我可以放一个图例,地图是交互式的,点击时会出现一个弹出窗口,颜色可能取决于连续变量.
我有以下代码使用Mapbox.js将GeoJSON图层添加到地图中(当然这是基于Leaflet.js构建的):
var orgLayer = L.geoJson(boundaries, {
onEachFeature: onEachFeature
});
this.layerGroup.addLayer(orgLayer);
function onEachFeature(feature, layer) {
layer.on('click', zoomToFeature, _this);
}
function zoomToFeature(e) {
this.map.fitBounds(e.target.getBounds());
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是GeoJSON可能包含多边形或点,因此Leaflet将图层渲染为路径或标记.当它是多边形(路径)时,一切正常.当它是Points(Markers)时,代码失败e.target.getBounds().
这是可以理解的,因为getBounds它只是Leaf中Leaf的一个方法,而不是Marker上的方法.我猜我可以使用Marker e.target.getLatLng().
但是,如何调整我的代码以检查目标是标记还是路径,并使用正确的方法?
从我所看到的传单中的彩色地图通常只描绘一个变量(GDP,犯罪统计数据,温度等),如下所示:
.有没有办法在传单R中制作显示数据框中最高变量的地图?例如,显示哪个酒精饮料在一个国家/地区最受欢迎,比如这个地图?
这http://i.dailymail.co.uk/i/pix/2011/02/17/article-1357892-0D3BD418000005DC-958_972x546.jpg 说我有一个看起来像这样的数据帧,我想做一个类似的映射到酒精饮料一...
Country Beer Wine Spirits Coffee Tea
Sweden 7 7 5 10 6
USA 9 6 6 7 5
Russia 5 3 9 5 8
Run Code Online (Sandbox Code Playgroud)
在传单R中有没有办法挑选出含酒精的饮料,给它们分配一种颜色,然后在地图上显示它们,以显示哪种类型的酒精饮料在三个不同的国家最受欢迎?
我使用react-leaflet在地图上可视化很长的路径.用户可以从列表中进行选择,我希望所选路径具有不同的颜色.更改状态和再次渲染太慢,我正在寻找更快的解决方案.
Leaflet路径元素有setStyle()方法,所以我的第一个想法是使用它而不是再次渲染.但是如何参考传单层?
class MyPathComponent extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
if (nextProps.selected){
this.setState({selected: true});
LEAFLET_POLYLINE.setStyle({
color: 'red'
});
}
return false;
}
render() {
return(
<Polyline polylines={this.props.path} />
);
}
}
Run Code Online (Sandbox Code Playgroud)
那么我应该在这段代码中编写什么而不是LEAFLET_POLYLINE?
我使用leaflet.extra包在R-shiny中创建了一个应用程序,放置了一个用户可以在其中绘制多边形的地图,我的目标是能够下载用户以GeoJson或Shapefil(.shp )。我的应用程序如下所示:
ui <- fluidPage(
textOutput("text"),leafletOutput("mymap") )
Run Code Online (Sandbox Code Playgroud)
和服务器:
poly<-reactiveValues(poligonos=list()) #save reactiveValues
output$mymap <- renderLeaflet({
leaflet("mymap") %>%
addProviderTiles(providers$Stamen.TonerLite, #map type or map theme. -default($Stame.TonerLite)
options = providerTileOptions(noWrap = TRUE)
)%>% addDrawToolbar(
targetGroup='draw',
editOptions = editToolbarOptions(selectedPathOptions = selectedPathOptions())) %>%
addLayersControl(overlayGroups = c('draw'), options =
layersControlOptions(collapsed=FALSE)) %>%
addStyleEditor()
})
polygons<- eventReactive(input$mymap_draw_all_features, {
features<-input$mymap_draw_all_features
poly$poligonos<-c(poly$poligonos,features)
return(poly$poligonos)
})
Run Code Online (Sandbox Code Playgroud)
名为“多边形”的eventReactive函数负责记录绘制的多边形(坐标),但我不知道如何保存它们或将其转换为GeoJson或shapefile格式。
为了防止在最高缩放级别上出现多个重复的世界地图,我正在使用noWrap=true选项。它运作良好,但仅在地图的左侧(灰色区域),右侧仍显示额外的图块。这是为什么?
UPDATE1:看起来是特定Mapbox磁贴或其加载方式存在问题吗?在这里noWrap和https://{s}.tiles.mapbox.com/v3/ebrelsford.ho06j5h0/{z}/{x}/{y}.png
完美运行:NoWrap可以运行JSBIN链接
但是一旦我改变了使用样式加载图块的另一种方式
我可以向右滚动但仍能获得图块
我打开了一个github问题,我怀疑这是库https://github.com/Leaflet/Leaflet/issues/5938的错误