我希望我的问题不是荒谬的,因为令人惊讶的是,这个问题在热门网站上显然还没有被提及(据我所知).
情况是我有几个csv文件,总共包含超过1个Mio观测值.每个观察都包含一个邮政地址.我打算将所有文件读入单个GeoDataFrame,对地址进行地理编码,在给定shapefile的情况下执行空间连接,并为每行保存多边形中的一些信息.我想这是相当标准的.这是一次性数据清理过程的一部分.
我的目标是使用此最终数据集设置数据库.这是因为它允许我非常容易地共享和搜索数据,以及例如在网站上绘制一些观察结果.此外,它使得根据某些标准选择观察结果变得非常容易,然后进行一些分析.
我的问题是插入GeoDataFrame到数据库的功能似乎并没有被还没有实现 - 这显然是因为GeoPandas应该是对数据库的一个替补多("GeoPandas使您可以轻松地做在巨蟒行动,否则将需要的空间数据库,作为PostGIS").
当然,我可以遍历每一行并"手动"插入每个数据点,但我在这里寻找最佳解决方案.对于任何解决方法,我也担心数据类型可能与数据库的数据类型冲突.这里有"最好的方式"吗?
谢谢你的帮助.
我试图将shapefile读入GeoDataFrame.
通常我只是这样做,它的工作原理:
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
df = gpd.read_file("wild_fires/nbac_2016_r2_20170707_1114.shp")
Run Code Online (Sandbox Code Playgroud)
但这一次它给了我错误: b'Recode from ANSI 1252 to UTF-8 failed with the error: "Invalid argument".'
完整错误:
---------------------------------------------------------------------------
CPLE_AppDefinedError Traceback (most recent call last)
<ipython-input-14-adcad0275d30> in <module>()
----> 1 df_wildfires_2016 = gpd.read_file("wild_fires/nbac_2016_r2_20170707_1114.shp")
/usr/local/lib/python3.6/site-packages/geopandas/io/file.py in read_file(filename, **kwargs)
19 """
20 bbox = kwargs.pop('bbox', None)
---> 21 with fiona.open(filename, **kwargs) as f:
22 crs = f.crs
23 if bbox is not None:
/usr/local/lib/python3.6/site-packages/fiona/__init__.py in open(path, mode, driver, schema, …
Run Code Online (Sandbox Code Playgroud) 我是python的新手,所以我希望我的问题的答案相对简单.
我正在尝试使用geopandas制作一个等值线图.但是,由于我正在制作需要相互比较的多个地图,因此使用自定义数据分类方案(而不是分位数或jenks)是必不可少的.因此,我一直在尝试使用User_Defined方案,我能够创建垃圾箱,但我不知道如何将它们应用到地图本身.
这就是我创建分类方案时所做的:
import pysal.esda.mapclassify as ps
from pysal.esda.mapclassify import User_Defined
bins = [5, 20, 100, 600, 1000, 3000, 5000, 10000, 20000, 400000]
ud = User_Defined(projected_world_exports['Value'], bins)
Run Code Online (Sandbox Code Playgroud)
(其中'Value'是我在地图中绘制的列)
然后,当我尝试绘制等值线图时,我不知道该方案的意图是什么
projected_world_exports.plot(column='Value', cmap='Greens', scheme = ?????)
Run Code Online (Sandbox Code Playgroud)
如果有人可以提供帮助,我将非常感激!
谢谢x
我有 2 个带有几何列的地理数据框,我将一些几何图形从 1 个复制到另一个。
这对于多边形效果很好,但对于任何(有效)多多边形都会返回 ValueError。
请指教如何解决这个问题?我不知道是否/如何/为什么应该更改 MultiPolygon 以获得“相等的长度键和值”?
geodata01.loc[index, 'geometry'] = geodata02.loc[index, 'geometry']
Run Code Online (Sandbox Code Playgroud)
这对于多边形效果很好。只有使用 MultiPolygons 我才能得到:
ValueError
if len(labels) != len(value):
--> 611 raise ValueError('Must have equal len keys and value '
612 'when setting with an iterable')
Run Code Online (Sandbox Code Playgroud)
我也无法对缓冲或简化的 MultiPolygon 进行分配(MultiPolygon 是有效的,我可以绘制、缓冲、简化,但无法分配它):
geodata01.loc[index, 'geometry'] = geodata01.loc[index, 'geometry'].buffer(0)
#or
geodata01.loc[index, 'geometry'] = geodata01.loc[index, 'geometry'].simplify(tolerance=0)
Run Code Online (Sandbox Code Playgroud)
这会返回相同的 ValueError。
I have this code:
import pandas as pd
import numpy as np
from geopandas import GeoDataFrame
import geopandas
from shapely.geometry import LineString, Point
import matplotlib.pyplot as plt
import contextily
''' Do Something'''
df = start_stop_df.drop('track', axis=1)
crs = {'init': 'epsg:4326'}
gdf = GeoDataFrame(df, crs=crs, geometry=geometry)
ax = gdf.plot()
contextily.add_basemap(ax)
ax.set_axis_off()
plt.show()
Run Code Online (Sandbox Code Playgroud)
Basically, this generates a background map that is in Singapore. However, when I run it, I get the following error: HTTPError: Tile URL resulted in a 404 error. Double-check …
我在尝试从脚本对某些数据库执行一些 I/O 操作时遇到了麻烦Python3
。
当我想要连接到数据库时,我习惯性地使用psycopg2
to 来处理连接和游标。
我的数据通常存储为and/or的等效项。 Pandas
DataFrames
GeoPandas
GeoDataFrames
Pandas
:我可以依赖它.read_sql()
作为参数的方法con
,如文档中所述:
con : SQLAlchemy connectable (engine/connection) or database str URI
or DBAPI2 connection (fallback mode)'
Using SQLAlchemy makes it possible to use any DB supported by that
library. If a DBAPI2 object, only sqlite3 is supported. The user is responsible
for engine disposal and connection closure …
Run Code Online (Sandbox Code Playgroud) 我试图绘制一张世界地图,其中包含所有具有不同风险级别(低、中和高)的国家。我想为每个风险级别设置不同的颜色,但不确定如何更改配色方案,以便每个风险类别都有我选择的颜色。
df.risk 变量目前低为 1,中等为 2,高为 3,因此它是一个连续变量,但是我想使用离散的,
fig = go.Figure(data=go.Choropleth(
locations = df['code'],
z = df['risk'],
text = df['COUNTRY'],
colorscale = 'Rainbow',
autocolorscale=False,
reversescale=True,
marker_line_color='darkgray',
marker_line_width=0.5,
colorbar_tickprefix = '',
colorbar_title = 'Risk level',
))
fig.update_layout(
title_text='Risk map',
geo=dict(
showframe=False,
showcoastlines=False,
projection_type='equirectangular'
),
annotations = [dict(
x=0.55,
y=0.15,
xref='paper',
yref='paper',
text='Source: <a href="www.google.com">\
Google</a>',
showarrow = False
)]
)
fig.show()
Run Code Online (Sandbox Code Playgroud)
我的示例 df 是:
{'Country': {0: 'Afghanistan',
1: 'Albania',
2: 'Algeria',
3: 'American Samoa',
4: 'Andorra'},
'code': {0: 'AFG', 1: 'ALB', 2: 'DZA', …
Run Code Online (Sandbox Code Playgroud) 我有两点如下。我需要以米为单位获得它们之间的距离。
POINT (80.99456 7.86795)
POINT (80.97454 7.872174)
Run Code Online (Sandbox Code Playgroud)
如何通过 GeoPandas 做到这一点?
我正在尝试将 Geopandas 数据框保存到直接写入压缩文件夹的 shapefile 中。
任何 shapefile 用户都知道,shapefile 不是单个文件,而是旨在一起读取的文件集合。所以呼吁 myGDF.to_file(filename='myshapefile.shp', driver='ESRI Shapefile')
不仅创造myshapefile.shp
而且myshapefile.prj
,myshapefile.dbf
,myshapefile.shx
和myshapefile.cpg
。这可能就是我努力在这里获得语法的原因。
例如,考虑一个虚拟的 Geopandas 数据框,例如:
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
data = pd.DataFrame({'name': ['a', 'b', 'c'],
'property': ['foo', 'bar', 'foo'],
'x': [173994.1578792833, 173974.1578792833, 173910.1578792833],
'y': [444135.6032947102, 444186.6032947102, 444111.6032947102]})
geometry = [Point(xy) for xy in zip(data['x'], data['y'])]
myGDF = gpd.GeoDataFrame(data, geometry=geometry)
Run Code Online (Sandbox Code Playgroud)
我看到人们使用gzip
,所以我尝试:
import geopandas as gpd
myGDF.to_file(filename='myshapefile.shp.gz', driver='ESRI Shapefile',compression='gzip')
Run Code Online (Sandbox Code Playgroud)
但它没有用。
然后我尝试了以下操作(在 …
我通过创建 choropleth 地图的方法plotly
似乎非常简单——加载到 DataFrame 中,加载到 geojson 中,将必要的特征分配给自定义多边形,然后绘制。
显然,在引用自定义多边形时在某处遗漏了一个步骤,因为在漫长的加载时间后只会出现一张空白地图。
需要注意的一件主要事情是,大约一半的多边形位于州内,但它们是州内的自定义多边形。因此,据我所知,choropleth_mapbox
是更合适的解决方案。
编码:
import pandas as pd
import plotly.express as px
import geopandas as gpd
from geojson import Polygon
import json
# reading in the dataframe
path = '/path/to/csv'
df = pd.read_csv(path)
geo_df = gpd.GeoDataFrame(df)
# reading in the geospatial data
with open('/path/to/geojson') as f:
geojson = json.load(f)
# create the plot
fig = px.choropleth_mapbox(geo_df[0:50], #slicing for quick loading
geojson=geojson,
color="MALL",
locations="MWS_ID",
featureidkey="properties.MWS_ID",
center={"lat": 39,
"lon": …
Run Code Online (Sandbox Code Playgroud) geopandas ×10
python ×8
pandas ×4
plotly ×2
shapefile ×2
bins ×1
choropleth ×1
contextily ×1
dataframe ×1
distance ×1
gis ×1
mapping ×1
mysql ×1
psycopg2 ×1
python-3.x ×1
shapely ×1
sqlalchemy ×1
user-defined ×1
zipfile ×1