Questions tagged «leaflet»

用于移动友好的交互式地图的开源JavaScript库

8
选择OpenLayers还是Leaflet?[关闭]
我在OpenLayers v / s Leaflet上与一位同事进行辩论。我的观点是,如果我们希望构建一个需要直接连接到Geoserver和PostGIS的项目,则OpenLayers是更好的API。 然后我发现了Open Data Kit,它看起来很新,但是具有与Geoserver和PostGIS的连接功能。 所以我的专案细节如下, 使用地图界面获取功能信息 创建一个自定义工具,从用户那里获取纬度/经度,以了解他/她在地图上单击的位置,然后从栅格中获取气候数据(由服务器上的py脚本处理) 允许用户上传excel,并将其上传到py脚本,该脚本返回一个GeoJSON,该GeoJSON在地图上创建矢量要素 允许用户创建矢量多边形,该矢量多边形将从WFS图层获取与其相交的要素。 从GeoServer上的PostGIS数据存储中获取图层,并在地图上显示图层。 所以,现在我对哪个更好感到困惑,为什么在Leaflet上使用OpenLayers更有意义?

7
创建具有GISCloud等渲染性能的矢量多边形?
我一直在寻找一种可靠的解决方案,该解决方案使我可以创建网络地图并覆盖矢量多边形,而无需花费太多时间来加载此类数据,目的是使我能够使每个多边形在悬停事件上显示不同的颜色。 据我所知,可以通过3种画布,SVG,Flash来实现这一目标。 如果Flash能在苹果iPhone / iPad上运行,它似乎是最好的解决方案,因为它似乎提供了最快的渲染速度和最干净的显示效果。画布似乎是第二好的选择,但是如果您要在地图上显示数百个多边形,则花费非常长的时间,而SVG需要花费更长的时间来渲染。 我几乎找不到希望解决该问题的解决方案的希望,但今天我遇到了一家名为GISCloud http://www.giscloud.com的公司(当前处于Beta版,具有免费注册)。 这家公司使SOMEHOW设法找到了一种惊人的方式来近乎实时地在地图上渲染数百个矢量。我对他们的方法感到惊讶,我向社区提出的问题与我们如何复制他们的方法以与现有技术一起使用,如传单,开放层,蜡... 通过查看此惊人的演示来自己看看:http : //www.giscloud.com/map/284/africa 确保将鼠标悬停在页面上的所有多边形上,并测试缩放控件,以确保这些多边形确实是矢量。 通过查看带有Firebug的请求,我已经注意到,该地图正在请求特定的json文件。似乎根据缩放级别/区域,有多个json文件被请求。 我还要在这里提到,一旦giscloud将数据加载到页面上,将鼠标悬停在矢量上就可以立即更改颜色,而无需创建新请求。 例子: http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/3/3.json http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/5/3.json http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/4/4.json http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/3/4.json http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/5/4.json 我假设url结构遵循标准的切片服务逻辑(例如,第3到最后一个文件夹是缩放级别...)。 无论如何,我已经分析了这些json文件的实际数据,并且看来他们使用的逻辑遵循某种逻辑,即它们仅基于这些数据值来创建矢量: 宽度/高度:它们定义每个json请求中提供的数据的宽度和高度 像素:在这里它们定义了像素值,我假设它们与某种广义点级别的一些一般x / y像素坐标有关?我猜他们会以某种方式根据缩放级别自动简化区域。我假设它们使用像素坐标,我猜想它们与经/纬度数据相比正在极大地减少需要加载的数据的大小。 样式:此处定义了两个RGB css值。“ F”代表多边形文件颜色,“ S”代表多边形边界颜色。 geom:这是我猜测它们在某种程度上定义的地方,具体定义正在加载的图块中的每个多边形,其中基于地图容器窗口定义此类数据。有趣的是,每个条目都有一个“ S”值,我假设该值用作可选属性或特征链接值,并且在每个条目的末尾都有一个区域,似乎在定义每个矢量ID的同时我猜测的层ID被用来以某种方式加入来自每个被调用的json磁贴请求的数据。 我还假设他们以某种方式找到了一种方法,可以根据需要为请求的图块加载的数据大小,自动确定并拆分每个图块需要加载的数据。 以下是这些请求之一的摘要: {"width":256,"height":256,"tile": {"pixels": [0,6461,-1,0,5,148,0,509,-1,10715,-1,1,-1,251,-1,1,-1,1,-1,251,-2,3,-1,255,-1,249,-2,5,-2,247,-1,509,-3,251,-1,2,-2,253,-2,252,-2,254,-1,255,-1,254,-1,255,-1,1276,-2,13,-1,233,-1,2,-1,253,-1,1,-1,255,-1,247,-1,1306,-1,1533,-1,1269,-1,1276,-1,2303,-1]}, "styles": [{"f":"rgb(99,230,101)","s":"rgb(5,148,0)","lw":"0"}], "geom": [ {"s":0,"p":[4,143,5,144,3,146,1,146,2,143,4,143],"c":"layer1156_5098"}, {"s":0,"p":[-2,143,0,140,2,141,2,144,1,146,-2,144,-2,143],"c":"layer1156_5067"}, {"s":0,"p":[7,143,5,144,4,143,2,143,2,141,5,138,6,139,5,141,7,143],"c":"layer1156_5051"}, {"s":0,"p":[10,141,11,137,12,137,14,137,12,142,9,143,9,142,10,141],"c":"layer1156_5041"}, {"s":0,"p":[1,136,0,140,-2,143,-2,136,1,136],"c":"layer1156_5038"}, {"s":0,"p":[8,143,5,141,5,137,8,136,10,137,10,141,8,143],"c":"layer1156_5033"}, {"s":0,"p":[5,137,2,141,0,140,1,136,1,136,2,135,3,136,5,137],"c":"layer1156_5028"}, {"s":0,"p":[10,134,12,136,11,138,8,135,10,134],"c":"layer1156_5020"}, {"s":0,"p":[-2,133,0,136,-2,136,-2,133],"c":"layer1156_5005"}, …

5
要将外部GeoJSON文件加载到Leaflet地图中?
我想将geoJSON(多边形)文件加载到我的传单地图中。我已经看到了将geoJSON嵌入到javascript代码中的示例,但是找不到任何示例来说明如何使用外部文件来完成它。 <head> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.5/leaflet.css" /> <script src="usStates.geojson" type="text/javascript"></script> <style> html, body, #map { height: 100%; } body { padding: 0; margin: 0; } </style> </head> <body> <div id="map" style="height: 100%"</div> <script src="http://d3js.org/d3.v2.min.js?2.9.3"></script> <script src="http://cdn.leafletjs.com/leaflet-0.5/leaflet.js"></script> <script type="text/javascript"> var map = L.map('map').setView([38.57, -94.71], 4); L.tileLayer('http://{s}.tile.cloudmade.com/9067860284bc491e92d2342cc51d47d9/998/256/{z}/{x}/{y}.png', …
53 leaflet  geojson 

13
将ArcGIS Server JSON转换为GeoJSON?
我正在使用Leaflet创建Web地图,并且希望能够从ArcServer抓取要素图层。我已经能够成功将要素类检索为JSON,但是Esri的JSON对象未遵循GeoJSON标准,因此无法显示。 有人知道处理此问题的转换脚本或工具吗? 如果没有,我计划创建一个脚本以将ArcServer JSON对象转换为GeoJSON。


6
使用Leaflet可视化大型数据集
当使用Leaflet可视化大型数据集(具有10,000个点特征的GeoJSON)时,浏览器崩溃或挂起就不足为奇了。来自同一数据集的1000个要素的子样本可以完美地工作。不幸的是,我无法共享数据集供其他人试用。 有没有人有更好的解决方案来可视化如此大的数据集?(最终目标是将其扩展到200万个功能)我什至愿意考虑离线可视化框架,以防基于浏览器的替代品(例如Polymaps或d3.js等)无法使用。 编辑:忘记提及了,用户需要能够按属性过滤数据集。因此,在N个要素中,可能仅需要动态渲染匹配的n <= N个要素。

3
添加/删除Leaflet GeoJSON图层
我正在尝试使用Leaflet API在不同的缩放层上显示不同的GeoJSON层。我可以一次加载并显示所有三个图层(尽管我实际上不希望它们一次全部显示)。我可以加载和显示它们在不同的缩放级别。 我已经设置了代码,以便在1-6缩放级别下,地图将显示一个GeoJSON图层。在7-10级,它将显示另一个,在11+级,将显示第三个。显示它们的作品。我现在要开始工作的是,如果显示了其他人,则将其关闭。从1-6移到7-10可以正常工作(这意味着它可以正确关闭1-6层),但是从7-10到11+不能正常工作(这意味着7-10层仍然存在),我无法确定找出原因(使用相同的代码)。 这是GeoJSON图层的ajax: function getJson(defaultStyle, map, simp, geojsonLayer){ var url = 'file' + simp + '.json'; map.removeLayer(geojsonLayer); geojsonLayer.clearLayers(); $.getJSON(url, function(data){ geojsonLayer = L.geoJson(data, { style: defaultStyle, onEachFeature: onEachFeature }); geojsonLayer.addTo(map); }); } 这是根据缩放比例调用ajax的主要功能。simpCounter最初设置为0。 map.on('zoomend', function(e) { if (map.getZoom() >= 7 && map.getZoom() <= 10) { if (simpCounter == 0 …

1
Leaflet中的默认投影是什么?
我已经在其网站上阅读了Leaflet的API文档,但我没有意识到:查看地图的默认投影是什么?它写的是关于球形和椭圆形墨卡托和等角线的-那么这三个中的哪一个呢?还是依赖于我使用的图块服务器,还是不依赖于传单在添加到屏幕之前即时即时重新投影图块? 其实我不明白我需要在QGIS中保存geoJSON文件的投影方式。为了在传单地图上正确显示,json坐标应为经纬度,而不是xy。但是,如果我尝试将其保存在Equirectangular中-坐标将为xy ..?

2
在地图上的div上禁用在传单地图上的平移/拖动
当您单击并拖动嵌入地图本身的div框上方时,是否有人知道如何抑制平移? 例如,在这里,当您单击并拖动到图例上方时,地图将随之拖动。我想取消该功能。我知道这种技术,但我想知道这是否是唯一的方法: map.dragging.disable();
25 leaflet 

5
离线滑图贴图数据库
我目前有一个离线HTML5地图应用程序(基于Leaflet和KendoUI构建,具有自定义添加功能),该应用程序具有应用程序清单,并且可以在多个平台上正常运行。但是,我不愿意使用清单以这种方式存储实际的地图图块(将PNG文件存储为TMS样式图块缓存)。 问题: 大约1,000个PNG文件中可能有很多图块(10MB-50MB) 初始下载可能真的很慢(并且很难向用户显示进度) App Manifests工作正常,否则,整个离线缓存都将失败(根据[whatwg.org] [1]) 离线用户偶尔会重新连接并需要刷新Tiles,这些都是很小的增量,但应用程序清单机制会在清单更新后立即重新加载所有js,css和PNG文件 替代方案:将Web应用程序与光滑地图图块的存储区分开。将图块存储在Web应用程序友好数据库中 更新: [PouchDB最近添加了对二进制Blob的支持。我得到了很好的初步结果。参见:https : //stackoverflow.com/questions/16721312/using-pouchdb-as-an-offline-raster-map-cache ] 这是本·诺兰(Ben Nolan)所建议的http://bennolan.com/2011/06/03/offline-mapping.html 关于摇杆地图的类似工作:http://developmentseed.org/blog/2010/oct/02/maps-stick-version-2-released/([不推荐使用[2]) MBtiles http://mapbox.com/developers/mbtiles/ TileStream https://github.com/mapbox/tilestream 路易斯·雷米:http : //louisremi.com/2011/10/07/offline-web-applications-were-not-there-yet/ 问题: 关于JavaScript友好数据库的以下选择,集体智慧(和经验)怎么说? SqlLite 似乎您需要为此创建一个本机应用程序包装,以使其能够与JavaScript通讯 例如,将DLL添加到Windows的本机程序中,然后将android / IOS的​​PhoneGap添加到本机程序中 WebSQL 敬业的 但这是一个SQL Lite,我可以轻松地从主机Web服务器生成和分发它 索引数据库 存储Blob似乎有效,请参见:https : //hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/ 我担心这是否是最初填充数据库的唯一方法 这基本上是SQLLite文件吗?我可以发货批量上传数据库吗? 我倾向于将其作为解决方案。是我不知道的陷阱吗? 要求: 快速初始填充(通过下载)到客户端Web DB 与当前的Leaflet TileLayer API兼容(即,我宁愿不编写自定义层,但如果需要的话...)(例如MbTiles) 平台:Windows笔记本电脑,但是需要Android和IOS平板电脑(我可以等到IndexDB发布,不需要立即支持) 我宁愿不编写本机应用程序(EXE,IOS,Android),但是如果那是最好的方法,那... …

4
在传单中绘制折线?
这是我在Leaflet中使用的编码: var pointA = new L.LatLng(28.635308, 77.22496); var pointB = new L.LatLng(28.984461, 77.70641); var pointList = [pointA, pointB]; var firstpolyline = new L.Polyline(pointList { color: 'red', weight: 3, opacity: 0.5 smoothFactor: 1 }); map.addLayer(firstpolyline); 该地图未显示任何结果。我只需要从一个点到另一个点的直线,只是将其可视化即可,而不是大地测量的正确性。点(在传单“圆圈”中)在地图上完美显示。
24 leaflet 

2
用于GeoJSON功能的setStyle()函数-传单
好的,因为我已经问了一个很长的问题,但是由于有一段时间没有收到任何新的答复,并且也不想在细节上感到困惑,所以我将尽力保持这一简单。 如果我没记错的话,setStyle用于命名的特定功能的函数如下: var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]]; var rect = L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map); rect.setStyle({color: "#4B1BDE"}); ...这会将颜色从橙色变为蓝色。我也知道resetStyle()将样式恢复为原始样式的功能。 这是我设置GeoJSON样式的方式: var everything = L.geoJson(myfile, { onEachFeature: function(feature){ array_of_layers.addLayer(feature); }, style: function(feature){ switch(feature.properties.name){ case "belgium": return belgium_style; break; case "bosnia": return bosnia_style; break; case "denmark": return denmark_style; break; case "great_britain": …


1
单击使用传单更改标记图标
我有一张地图上有很多(> 100)标记。我想这样做,以便单击这些将图标更改为突出显示的版本。我创建了两个自定义图标,一个是常规图标,另一个是突出显示的图标。我已经将其与单个标记一起使用,但是找不到任何设置方法,因此可以通过单击来更改每个图标。 这是一个图标的工作代码: var testmarker = L.marker([44.0, -73.0], {icon: unselectedIcon}); testmarker.on('click', function(e) { testmarker.setIcon(selectedIcon); }); 但是我有很多标记,并使用for循环放置它们: //points is a 2 dim array with lat/long pairs for (i = 0; i <= points.length-1; i++) { var marker = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon}); } marker.on('click', function(e) { marker.setIcon(selectedIcon); }); 我尝试通过使用数组为每个标记赋予唯一的变量名称: for (i …
20 leaflet  markers 

3
暂时停用小叶互动
如何在Leaflet.js中临时禁用zoming / draging Mapview。尝试了很多方法,但没有任何运气。将其设置为临时状态非常重要,我还需要再次启用该选项。
20 leaflet 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.