使用带有C#的ASP.NET MVC 3我有一个网页来显示一个地图,我想在其上添加一条由多个纬度和经度坐标组成的折线.使用Leaflet JavaScript库,您可以添加GeoJson图层.我想从C#中的数据库中获取经度和纬度坐标,并将坐标列表传递给JavaScript以创建GeoJson或GeoJson.
这是我想创建的GeoJson的一个例子:
var polyline = {
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[-105.00341892242432, 39.75383843460583],
[-105.0008225440979, 39.751891803969535] …
]
},
"properties": {
"popupContent": "This is a polyline of many coordinates.",
"underConstruction": false
}
};
Run Code Online (Sandbox Code Playgroud)
如何创建类似于上面显示的GeoJson并将位置数据添加到C#或JavaScript 的" coordinates "部分,然后在JavaScript中使用它来添加图层:
var myLayer = L.geoJson().addTo(map);
myLayer.addData(polyline);
Run Code Online (Sandbox Code Playgroud)
我已经开始使用GeoJSON.net并提出了这个代码:
foreach (Position point in Positions)
{
coordinates.Add(point);
}
GeoJSON.Net.Geometry.LineString line = new GeoJSON.Net.Geometry.LineString(coordinates);
JavaScriptSerializer serializer = new JavaScriptSerializer();
var data = serializer.Serialize(lineString);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将这个GeoJSON LinseString对象从C#传递给JavaScript.我无法使用Json传递它:
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用GeoJSON格式获取英国的地区地图http://en.wikipedia.org/wiki/Regions_of_England,以便在网站上的网络访问地图中使用它.您是否可以在任何地方以GeoJSON格式获取不同国家/地区的数据?
在看了Google Devs 的最新视频后,我决定制作一张英国的区域地图.在这个网站上提到的一些可能性,我已经不得不解雇*
所以我最终使用这个网站(数据下载的示例页面):http://mapit.mysociety.org/area/11804.html
注意GeoJSON下载作为第三个链接下来?它的文件大小约为1Mb.当我第一次尝试将它与我的地图一起使用时:
function initMap(){
var ukc = new google.maps.LatLng(54.8, -4.6);
var mapOptions = {
zoom: 5,
center: ukc
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
map.data.loadGeoJson('http://local.mapsite.com:8080/app/jsondata/eastern.json');
}
$(document).ready(function(){
initMap();
});
Run Code Online (Sandbox Code Playgroud)
我收到了上述错误:Uncaught InvalidValueError:不是Feature或FeatureCollection
谷歌搜索错误回来没有任何用处.
我想也许这是野兽的庞大规模所以我使用mapshaper.org将它缩小到一个更易于管理的10K.仍然没有运气!
也许我的GeoJSON格式错误了?但是怎么可能会考虑在mapit.org上工作,但是我找到了这个用于绘制GeoJSON数据的精彩网站:http://geojsonlint.com/ - linting有效!显然,GeoJSON工作得非常好,它在英国的所有荣耀中绘制了我的东英吉利亚多边形(注意geojsonlint使用OpenStreetMap).但仍然没有运气
希望我可以结合区域并压缩,同时我绝望地认为topojson会起作用.我试过 - 我仍然有同样的错误.这是我在Google云端硬盘上分享的topojson文件的链接:someregions.json 没有运气.
当前的GeoJSON文件启动{"bbox":[ - 0.745702,51.448473,1.767999,52.98991],"type":"GeometryCollection","geometry":...
我补充说:
{"type": "Feature", "bbox":[-0.745702,51.448473,1.767999,52.98991],"type":"GeometryCollection","geometries": …Run Code Online (Sandbox Code Playgroud) 我通过调用PostGIS数据库返回了一些GeoJSON.我希望能够为每个功能添加标记,并能够切换不同类型的标记/功能.目前我正在使用JavaScript为每个功能生成一个标记,根据类型将它们添加到数组中,然后根据需要通过数组设置show/hide来切换'layers'.
这工作正常,但我想知道新的GeoJSON功能是否提供了更好的方法.据我所知,所有功能都被添加到同一个数据层,并且切换它们将涉及设置样式或仅替换新的预过滤的GeoJSON.
所以问题是,是否可以拥有多个数据层,并可以轻松地从地图中添加/删除它们,或者我最好不要查看类似OpenLayers的内容?
编辑:更多研究表明它非常简单.
对于要切换的要素集合中的每种要素类型,请创建新的Data对象.将所有相关功能添加到该数据对象.
var datalayer = new google.maps.Data();
datalayer.addGeoJson(feature);
datalayer.setMap(mainmap);
Run Code Online (Sandbox Code Playgroud)
然后将每个数据对象/要素类型存储为键值对.在切换时,根据需要拉出相关数据对象和setMap:
var datalayer= featuretypesobj["feature type to toggle"];
datalayer.setMap(mymap); //or
datalayer.setMap(null);
Run Code Online (Sandbox Code Playgroud) 我有使用方法加载的多边形
map.data.loadGeoJson('geo.json',{ idPropertyName: 'ID' });
Run Code Online (Sandbox Code Playgroud)
现在我想制作一个从geojson多边形加载的可编辑的.
我被尝试过:
map.data.getFeatureById(1).setProperty('editable', true);
Run Code Online (Sandbox Code Playgroud)
但似乎data.feature没有可编辑的属性?
有任何想法如何以最简单的方式制作它?我现在只有一个想法是从geoJson创建我自己的解析器并将所有形状绘制为google.maps.Polygon().
我正在尝试构建一个GeoJSON对象.我的输入是一个带有地址列,lat列和lon列的csv.然后,我从坐标中创建了Shapely点,用给定的半径缓冲它们,并通过映射选项获得坐标字典 - 到目前为止,非常好.然后,在提到这个问题后,我编写了以下函数来获得一系列字典:
def make_geojson(row):
return {'geometry':row['geom'], 'properties':{'address':row['address']}}
我这样应用了它:
data['new_output'] = data.apply(make_geojson, axis=1)
Run Code Online (Sandbox Code Playgroud)
我的结果列充满了以下内容: <built-in method values of dict object at 0x10...
最奇怪的部分是,当我直接调用函数(即make_geojson(data.loc[0])我其实做得到我期待字典.甚至离奇的是,当我打电话,我从得到的功能应用(例如data.output[0](),data.loc[0]['output']())我得到的相当于以下列表:
[data.loc[0]['geom'], {'address':data.loc[0]['address']}],即我想要获得的字典的值(但不是键).
对于那些在家里玩的人来说,这是一个玩具示例:
from shapely.geometry import Point, mapping
import pandas as pd
def make_geojson(row):
return {'geometry':row['geom'], 'properties':{'address':row['address']}}
data = pd.DataFrame([{'address':'BS', 'lat':34.017, 'lon':-117.959}, {'address':'BS2', 'lat':33.989, 'lon':-118.291}])
data['point'] = map(Point, zip(data['lon'], data['lat']))
data['buffer'] = data['point'].apply(lambda x: x.buffer(.1))
data['geom'] = data.buffer.apply(mapping)
data['output'] = data.apply(make_geojson, axis=1)
Run Code Online (Sandbox Code Playgroud) GeoJSON中LineString和MultiPoint有什么区别?
对我来说,给出的例子是相同的.http://geojson.org/geojson-spec.html#id3.
我正在计划GeoJSON中的一些东西,如果基本的东西让我感到困惑,那我就麻烦了.
我通过在传单中创建 GeoJSON 图层来为地图上的区域着色。首先我创建一个空层:
var layerPostalcodes=L.geoJSON().addTo(map);
Run Code Online (Sandbox Code Playgroud)
然后,我创建一个包含形状信息的 geojson 元素并将其添加到图层中:
layerPostalcodes.addData(geojson);
Run Code Online (Sandbox Code Playgroud)
这将正确显示地图上的区域。现在,单击按钮我想从地图上删除所有形状。这是行不通的。我尝试了几种方法:
layerPostalcodes.clearLayers();
Run Code Online (Sandbox Code Playgroud)
或者通过 LayerGroup,向其中添加 GeoJSON 层,以便我可以使用removeLayer()。但是,这甚至不显示形状,更不用说删除它们了。
var layerGroup = new L.LayerGroup();
layerGroup.addLayer(layerPostalcodes);
layerGroup.addTo(map);
layerGroup.removeLayer(layerPostalcodes);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我一天前刚开始使用 R,我正在尝试使用 SF 库读取 geojson 文件,但我不确定正确的方法是什么。
library(dplyr)
library(sf)
geo <- system.file('/my/path/zones.geojson', package = 'sf')
st_read(geo)
Run Code Online (Sandbox Code Playgroud)
当我运行这些代码行时,我收到错误消息:
Cannot open data source
Error in CPL_read_ogr(dsn, layer, as.character(options), quiet, type, :
Open failed.
Run Code Online (Sandbox Code Playgroud)
请大家告诉我如何修改,谢谢大家!
有没有办法在python中合并两个重叠的GEOJSON多边形,返回一个合并的GEOJSON对象?