我正在构建一个以JSON格式提供地理边界数据的Web服务.
地理数据使用表中的地理类型存储在SQL Server 2008 R2数据库中.我使用[ColumnName].ToString()方法将多边形数据作为文本返回.
示例输出:
POLYGON ((-6.1646509904325884 56.435153006374627, ... -6.1606079906751 56.4338050060666))
MULTIPOLYGON (((-6.1646509904325884 56.435153006374627 0 0, ... -6.1606079906751 56.4338050060666 0 0)))
Run Code Online (Sandbox Code Playgroud)
地理定义可以采用定义多边形的纬度/长度对数组的形式,或者在多个定义的情况下,采用数组或多边形(多边形).
我有以下正则表达式,根据输出将输出转换为多维数组中包含的JSON对象.
Regex latlngMatch = new Regex(@"(-?[0-9]{1}\.\d*)\s(\d{2}.\d*)(?:\s0\s0,?)?", RegexOptions.Compiled);
private string ConvertPolysToJson(string polysIn)
{
return this.latlngMatch.Replace(polysIn.Remove(0, polysIn.IndexOf("(")) // remove POLYGON or MULTIPOLYGON
.Replace("(", "[") // convert to JSON array syntax
.Replace(")", "]"), // same as above
"{lng:$1,lat:$2},"); // reformat lat/lng pairs to JSON objects
}
Run Code Online (Sandbox Code Playgroud)
这实际上工作得很好,并且在响应操作调用时动态地将DB输出转换为JSON.
然而,我不是正则表达式大师,而且String.Replace()对我来说效率似乎也低效.
有没有人对此表现有任何建议/意见?
我的django Web应用程序应该执行以下操作:将Geojson对象传递给视图,使用传单映射点,并在用户单击点标记时显示一些其他信息.我对js不是那么熟悉所以我被绑定了正确的数据到click事件.这是一个geojson对象示例.如何通过我的活动访问"id" click?
var geojsonFeature = {'geometry':
{'type': 'MultiPoint',
'coordinates': [[4.939, 52.33], [4.9409, 52.33]]
},
'type': 'Feature',
'properties':
{'id': '52','popupContent': 'id=52'}
};
Run Code Online (Sandbox Code Playgroud)
将geojson对象添加到地图中..
var gj = L.geoJson(geojsonFeature, {
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng, geojsonMarkerOptions);
}}).addTo(map);
Run Code Online (Sandbox Code Playgroud)
并且 - on()点击....
gj.on('click', function(evt) {
alert(id) // well, this is where I need help
});
Run Code Online (Sandbox Code Playgroud)
注意:我不想使用类似的东西,bindPopup(feature.properties.popupContent)因为我想打开一个新窗口,使用数据库中的一些额外数据调用不同的django视图.
我有两个geoJson图层被加载 - 这两个图层是用于测试目的的相同数据,但是从两个不同的json文件中提取.当我在图层控制器中打开和关闭图层时,图层的绘制顺序会发生变化.
任何想法为什么会这样?
我已将我的代码放入JSFiddle:http://jsfiddle.net/lprashad/ph5y9/10/,JS如下:
//styling for watersheds_copy
var Orange = {
"color": "#ff7800",
"weight": 5,
"opacity": 0.65
};
var Water_Orange = L.geoJson(watersheds_copy, {
style: Orange
});
Water_Orange.addData(watersheds_copy);
//these are blue
var Water_blue = L.geoJson(watersheds, {});
Water_blue.addData(watersheds);
//This sets the inital order - last in layer list being on top. Except minimal - tile layer is always on bottom
var map = L.map('map', {
center: [41.609, -74.028],
zoom: 8,
layers: [minimal, Water_Orange, Water_blue]
});
var baseLayers …Run Code Online (Sandbox Code Playgroud) 我想生成具有可变数量多边形的geoJSON.2个多边形的示例:
{
"type": "FeatureCollection",
"features": [
{"geometry": {
"type": "GeometryCollection",
"geometries": [
{
"type": "Polygon",
"coordinates":
[[11.0878902207, 45.1602390564],
[0.8251953125, 41.0986328125],
[7.63671875, 48.96484375],
[15.01953125, 48.1298828125]]
},
{
"type": "Polygon",
"coordinates":
[[11.0878902207, 45.1602390564],
[14.931640625, 40.9228515625],
[11.0878902207, 45.1602390564]]
}
]
},
"type": "Feature",
"properties": {}}
]
}
Run Code Online (Sandbox Code Playgroud)
我有一个函数,它给我每个多边形的坐标列表,所以我可以创建一个多边形列表,所以我能够构建geoJSON用for循环迭代它.
问题是我没有看到如何轻松地做到这一点(我想例如将列表作为字符串返回,但将geoJSON构建为字符串看起来是个坏主意).
我被建议这个非常pythonic的想法:
geo_json = [ {"type": "Feature",,
"geometry": {
"type": "Point",
"coordinates": [lon, lat] }}
for lon, lat in zip(ListOfLong,ListOfLat) ]
Run Code Online (Sandbox Code Playgroud)
但由于我添加了可变数量的多边形而不是点列表,因此这种解决方案似乎不合适.或者至少我不知道如何适应它.
我可以把它建成一个字符串,但我想以更聪明的方式做到这一点.任何的想法?
我想要做的很简单; 使用我的PHP代码从Mysql表中获取marker的数据,将其转换为geoJson(由MapBox使用),将geoJson发送到javascript,然后将这些标记填充到我的地图中.
我一直在仔细阅读以下两个链接,显然包含了我需要解决的所有信息,但我不确定我缺少什么.
在这里,您可以看到如何从MapBox中的geoJson填充标记的示例;
在这里,您可以看到如何从MySql表创建geoJson;
我的sql表看起来像这样,这里是创建代码加上一些虚拟数据;
-- phpMyAdmin SQL Dump
-- version 4.0.4.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 21, 2013 at 03:26 PM
-- Server version: 5.5.32-cll-lve
-- PHP Version: 5.5.0
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
--
-- Database: `pgmq`
--
-- --------------------------------------------------------
--
-- Table structure for table `mapa`
--
CREATE TABLE IF NOT EXISTS `mapa` (
`contrato` int(11) NOT NULL,
`name` varchar(60) NOT NULL,
`address` varchar(80) NOT NULL, …Run Code Online (Sandbox Code Playgroud) 这个问题部分回答了我的问题.作者使用类似的json结构..
我的问题:如何在嵌套对象中允许嵌套数组?我有一个Contribution模特has_many Features.我正在尝试创建GeoJSON多边形.在coordinates保持为空
这是我发送的JSON
{
"contribution": {
"features_attributes": [
{
"geojson": {
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
7.263336181640625,
52.07190953840937
],
[
7.263336181640625,
52.135173926548894
],
[
7.404785156249999,
52.135173926548894
],
[
7.404785156249999,
52.07190953840937
],
[
7.263336181640625,
52.07190953840937
]
]
]
}
}
}
],
"title": "324",
"description": "23"
}
}
Run Code Online (Sandbox Code Playgroud)
目前我的许可证代码如下:
params.require(:contribution).permit(
:title,
:description,
features_attributes: [
{ geojson: [
:type,
{ geometry: [
:type,
#{ coordinates: [] } …Run Code Online (Sandbox Code Playgroud) 我尝试在打字稿中使用GeoJson,但编译器会为这两个变量抛出错误: Generic type 'Feature<T>' requires 1 type argument(s)
const pos = <GeoJSON.Feature>{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [0, 1]
}
};
const oldPos = <GeoJSON.Feature>{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [2, 4]
}
};
Run Code Online (Sandbox Code Playgroud)
这应该是什么意思?
我有一个包含一些国家和变量的数据框,我想folium用整个世界的geojson文件生成一个等值区域图.我folium在将色标上的最大值分配给我的数据帧中不存在的国家时遇到问题.以下最低限度:
import random
import pandas as pd
import folium
import json
map_data = pd.DataFrame({
'A3':['POL', 'CZE', 'SVK', 'HUN', 'AUT'],
'value':random.sample(range(10), 5)
})
m = folium.Map(
location = [50, 15],
zoom_start = 4
)
m.choropleth(
geo_data = 'https://github.com/simonepri/geo-maps/releases/download/v0.6.0/countries-land-10km.geo.json',
data = map_data,
columns = ['A3', 'value'],
key_on = 'feature.properties.A3',
fill_color = 'YlOrRd'
)
Run Code Online (Sandbox Code Playgroud)
我的问题如下:如何判断folium为丢失的国家(即存在于json文件中但未存在的那些)中的特定颜色(例如,灰色或透明map_data),而不是将它们作为给定变量的最大值着色(这是一种奇怪的行为)?
我有两个 choropleth 层,我想在其中添加 GeoJsonTooltip,但我一直收到错误 TypeError: __init__() missing 1 required positional argument: 'text'
我目前的代码如下。
import folium
import pandas as pd
import json
df_theft = pd.read_csv('PA_Theft.csv')
df_assualt = pd.read_csv('PA_Assualt.csv')
theft_json = json.load(open('theft_geojson.json'))
assualt_json = json.load(open('assualt_geojson.json'))
m = folium.Map(location=[41.20, -77.50], tiles="cartodbdark_matter", zoom_start=8.3)
theft = folium.Choropleth(
geo_data=theft_json,
data=df_theft,
columns=['county_name', 'rate'],
key_on='feature.properties.county_name',
fill_color='OrRd',
fill_opacity=0.9,
nan_fill_color='#ffffff',
nan_fill_opacity=0.9,
legend_name='Incident rate per 100,000 people',
highlight=True,
name='Theft'
).add_to(m)
folium.GeoJson(
theft_json,
tooltip=folium.features.Tooltip(fields=['feature.properties.county_name'])
).add_to(theft)
assualt = folium.Choropleth(
geo_data=assualt_json,
data=df_assualt,
columns=['county_name', 'rate'],
key_on='feature.properties.county_name',
fill_color='OrRd',
fill_opacity=0.9,
nan_fill_color='#ffffff',
nan_fill_opacity=0.9,
legend_name='Incident rate per 100,000 people', …Run Code Online (Sandbox Code Playgroud) 我试图从自然地球的世界 shp 文件中提取某些国家/地区。
我目前使用的是 windows 10,所以我安装了 python 3.7,gdal 来使用 ogr2ogr。
我在命令中输入了以下代码来提取韩国
ogr2ogr -f GeoJSON -where "geonunit='韩国'" korea-geo.json ne_10m_admin_1_states_provinces.shp
但是出现了以下错误。
错误 1:PROJ:proj_create_from_wkt:找不到 proj.db
错误 1:PROJ:proj_identify:找不到 proj.db
我已经为 Gdal 设置了环境变量..
C:\Program Files\GDAL\gdal-data
C:\Program Files\GDAL\gdalplugins
请指导我解决这个问题。