可以理解为闭合的线或无孔多边形的边框,创建时传入数据的格式与Polygon相同。...之后关于geopandas投影坐标系管理的文章将会详细介绍,这里仅做演示): # 创建混合点线面的GeoSeries,这里第5个有孔多边形内部空洞创建时使用[::-1]颠倒顺序 # 是因为GeoSeries.plot...()方法绘制有孔多边形的一个bug,即外部边框与内部孔洞创建时坐标 # 方向同为顺时针或顺时针时内部孔洞会自动被填充,如果你对这个bug感兴趣,可以前往 # https://github.com/geopandas...时作为每行所关联几何对象的GeoSeries需要通过geometry参数指定,而除了用上述的方式创建GeoDataFrame,先创建数据表,再添加矢量信息列亦可。...因此我们可以在一个GeoDataFrame中保存多列矢量,需要用到哪列时再进行切换即可,如下面的例子: geo_df = gpd.GeoDataFrame(contents, columns=['均值'
1 问题 我们知道,在学习深度学习的过程中,搭建网络是我们必须要掌握的,在搭建网络的过程中,我们也遇到了很很多的问题,为什么要使用卷积层,卷积层的参数我们应该怎么去定义,以及为什么要去用池化,池化的参数又该怎么去定义...这些都是在搭建优质网络中必须要使用的。该怎么去使用?各层的参数该怎么定义? 2 方法 2.1 卷积层 卷积就是使用输入矩阵与卷积核进行卷积计算,通过卷积计算后的结果据说目标的特征信息。...在这层中通常使用较多的是MaxPool2d和AvgPool2d,区别在于使用卷积核进行运算时,是采取最大值还是平均值。以MaxPool2d为例,在下述矩阵中采用大小为二的卷积核,输出如下。...我总结了在上述三层在python中经常使用的参数,这当我们在搭建自己的网络的时候是非常用帮助的,在搭建网络的时候我们可以明确每一个参数的意思,这可以去加快我们对网络的认识,以及让自己搭建网络的速度更快。...还有就是看见别人搭建的很好的网络,我们可以更快的去理解网络的搭建过程,进而创建网络。
图12 LinearRing LinearRing对应shapely.geometry中的LinearRing,是一种特殊的几何对象,可以理解为闭合的线或无孔多边形的边框,创建时传入数据的格式与Polygon...()方法绘制有孔多边形的一个bug,即外部边框与内部孔洞创建时坐标 # 方向同为顺时针或顺时针时内部孔洞会自动被填充,如果你对这个bug感兴趣,可以前往 # https://github.com/geopandas...图20 is_valid 在shapely中涉及到很多拓扑计算操作时,对几何对象的合法性有要求,譬如定义多边形时坐标按顺序连线时穿过了之前定义的边就属于非法,因为geopandas对矢量对象的计算依赖于...图21 下面我们尝试用shapely中的intersection方法来取得这两个几何对象的相交部分,出现了拓扑逻辑错误: ?...图28 其中定义GeoDataFrame时作为每行所关联几何对象的GeoSeries需要通过geometry参数指定,而除了用上述的方式创建GeoDataFrame,先创建数据表,再添加矢量信息列亦可
今天在刷视频的时候看到了我订阅的Youtube博主更新了,感觉内容蛮有用的,就分享给大家 原视频链接如下,打开需要魔法 https://www.youtube.com/watch?...gdf = gpd.GeoDataFrame( df, geometry=gpd.points_from_xy(df.longitude_deg, df.latitude_deg)...=row.name).add_to(m) # Save the map to an HTML file m.save("map.html") 然后在桌面就会生成一个map.html,你可以使用任何网络浏览器打开...显示的数据多是因为包含了直升机机场 筛选需要的数据 在数据中type列是机场属性,接下来就让ChatGPT教我如何显示筛选出的大型机场吧 这是ChatGPT修改后的代码 import pandas...在遥感和GIS领域,我看到他巨大的潜力,特别是作为编写代码修改BUG的工具方面,他会给我们提供非常有用的指导,在未来 的地理空间分析学习工程中,我将尝试把ChatGPT带给你们,展现出在AI帮助下我们的工作将会变得更加轻松
图3 点击保存成功创建数据库之后,要注意这时我们的demo数据库只是个普通的postgresql数据库,是不支持空间相关功能的,在对应数据库上右键打开查询工具: ?...)与sqlalchemy(后者用于创建数据库连接),并读入重庆市.geojson文件,你可以在开头的Github仓库找到它: ?...con:sqlalchemy.engine.Engine对象,用于建立与数据库的连接 if_exists:字符型,用于指定当数据库中已存在同名表时的相应策略,'fail'表示抛出错误,'replace...index信息指定字段名称 首先需要利用sqlalchemy中的create_engine来创建数据库连接,传入字符串包含了数据库类型、用户名、密码、主机IP、端口以及数据库名称,格式为: 数据库类型...对应从空间数据库中提取数据的SQL语句 con:同to_postgis() geom_col:字符型,用于指定将哪一列作为GeoDataFrame的矢量列 crs:用于指定坐标参考系,同GeoDataFrame
,在「pgAdmin」界面内新建数据库,譬如这里我们新建数据库demo: 图2 图3 点击保存成功创建数据库之后,要注意这时我们的demo数据库只是个普通的postgresql数据库,是不支持空间相关功能的...sqlalchemy(后者用于创建数据库连接),并读入重庆市.geojson文件,你可以在开头的Github仓库找到它: 图6 接着我们来演示如何通过geopandas向PostGIS推送矢量信息表,...「if_exists」:字符型,用于指定当数据库中已存在同名表时的相应策略,'fail'表示抛出错误,'replace'指替换,'append'指向原表追加,默认为fail 「schema」:字符型,...❞ 首先需要利用sqlalchemy中的create_engine来创建数据库连接,传入字符串包含了「数据库类型」、「用户名」、「密码」、「主机IP」、「端口」以及「数据库名称」,格式为: 数据库类型...「geom_col」:字符型,用于指定将哪一列作为GeoDataFrame的矢量列 「crs」:用于指定坐标参考系,同GeoDataFrame的坐标参考系设定方式 「index_col」:字符型或列表
思考半天,找到了答案,直接对两个 GeoDataFrame 对象做类似数据库的 join 操作不就可以了嘛,只是任意两个判断的时候用空间操作代替数据库的匹配操作。...创建两个 GeoDataFrame 对象 geopandas 可以直接将 shp 文件读为 GeoDataFrame 对象,如下: shpdata = GeoDataFrame.from_file(path...) 此处,采用模拟的方式创建两个 GeoDataFrame 对象,如下: p1 = Point([1, 2]) p2 = Point([1.5, 1.7]) p3 = Point([1.8, 1.5])...4个点对象,使用前两个创建第一个 GeoSeries 对象,后两个创建第二个 GeoSeries 对象。...解决问题的途径有很多,而最简单最优美的解决方式总是无止境的,在解决某一实际问题时我们无需过多的思考如何最佳,但是当闲暇时刻静下心来的时候还是应该想想碰到的问题如何解决才是最优的。
GeoDataFrame 基于经纬度数据 GeoDataFrame有一个geometry列,我们可以通过经纬度数据Latitude和Longitude创建该列。...准备数据 # 创建点 GeoDataFrame points = gpd.GeoDataFrame( [ {'id': 'p1', 'geometry': Point(0, 0)..._subplots.AxesSubplot at 0x7f75ed360bb0> # 创建多边形 GeoDataFrame polygons = gpd.GeoDataFrame( [...等等 ⚠⚠source参数选择不同底图的来源,可能需要大量时间或者特定网络,如果失败多重试运行代码。...当我们使用地图服务时,通过改变xyz的值,就可以获取到不同位置、不同缩放级别下的地图瓦片,从而达到展示不同地图的目的。
安装完成后,我们就来一睹这些新功能的效率如何,首先我们创建一个足够大的虚拟表(200万行11列),并为其新增点要素矢量列: import numpy as np from shapely.geometry...import Point import pandas as pd from tqdm.notebook import tqdm # 创建虚拟表,其中字段名为了导出shapefile不报错加上非数字的前缀...geometry'] = base.progress_apply(lambda row: Point(row['_10'], row['_11']), axis=1) # 添加矢量列 base = gpd.GeoDataFrame...(base, crs='EPSG:4326') # 转换为GeoDataFrame 最终得到一个较为庞大的GeoDataFrame,接着我们分别测试geopandas读写shapefile、feather...所以当你要存储的矢量数据规模较大时,可以尝试使用feather和parquet来代替传统的文件格式。
安装完成后,我们就来一睹这些新功能的效率如何,首先我们创建一个足够大的虚拟表(200万行11列),并为其新增点要素矢量列: import numpy as np from shapely.geometry...import Point import pandas as pd from tqdm.notebook import tqdm # 创建虚拟表,其中字段名为了导出shapefile不报错加上非数字的前缀...geometry'] = base.progress_apply(lambda row: Point(row['_10'], row['_11']), axis=1) # 添加矢量列 base = gpd.GeoDataFrame...(base, crs='EPSG:4326') # 转换为GeoDataFrame 最终得到一个较为庞大的GeoDataFrame,接着我们分别测试geopandas读写shapefile、feather...shapefile 325秒 96秒 619MB feather 50秒 25.7秒 128MB parquet 52.4秒 26秒 81.2MB 所以当你要存储的矢量数据规模较大时,可以尝试使用
解决方案:确保CSV文件中的经纬度列名符合标准,如latitude和longitude,然后使用geopandas.GeoDataFrame创建地理数据框。...geometry = [Point(xy) for xy in zip(df['longitude'], df['latitude'])]# 创建GeoDataFramegdf = gpd.GeoDataFrame...空间索引与查询问题描述:对大规模地理数据进行空间查询时,性能较差。 解决方案:使用geopandas的空间索引来加速查询。...投影变换问题描述:不同数据源的坐标系不一致,导致叠加显示时出现偏差。 解决方案:使用to_crs方法进行投影变换。...解决方法:确保每个数据集都有明确的CRS定义,并且在合并或叠加时保持一致。2. AttributeError错误原因:尝试访问不存在的属性或方法。
具体过程可以直接参考百度的教程: https://www.yiibai.com/postgresql/install-postgresql.html 其中有几个细节点需要格外注意(自己踩过的坑) 1、尽量自己命名一个主目录...这张表整体就是我们之前在分享 R语言的sf对象和Python中的GeoDataFrame对象的技术雏形。...可以看到地理信息列在postgis中已经被编码成一组特殊数字,而在R中的sf对象中则是嵌套列表,在Python的GeoDataFrame中则是特殊的geomtry列。...写入空间数据: 写入空间数据时,一般要以sp格式写入(就是之前用的最多的,maptools、rgdal包导入的默认格式),但是好在sf包中提供了一键转化sf和sp对象的函数,所以这里的写入数据格式转换非常高效...中的GeoDataFrame做出更多具备商业价值的东西,感兴趣的也可以一起分享交流心得。
:GeoDataFrame,传入空间连接对应的右表 how:字符型,用于决定连接方式,'inner'表示内连接,且连接结果表中的矢量列来自左表;'left'表示左连接,且结果表中的矢量列来自左表;'right...,其他类型几何对象之间的空间连接你也可以根据自己的需要进行操作,值得一提的是,利用sjoin()进行空间左、右、内连接时,因为结果表依旧是GeoDataFrame,所以只会保留一列矢量列,按照上文中参数介绍部分的描述...在geopandas中我们可以使用clip()函数来基于蒙版矢量对目标矢量进行裁切,其主要参数如下: gdf:GeoDataFrame或GeoSeries,代表将要被裁切的矢量数据集 mask:GeoDataFrame...举个实际的例子,当我们想算出整个柏林被出租车站点500米缓冲区所覆盖的步道路网总长度时,可以在上文裁切计算结果的基础上直接求得: 图17 但当我们想要针对每个站点求出各自500米缓冲区内部的步道路网长度时...撰写本系列文章的初衷,一是因为我对pandas的高度熟悉,二是由于喜欢编程,对ArcGIS之类主要靠点击相应按钮完成任务且容易出错的空间分析软件不太喜欢,所以在了解到有这么一个与pandas有着莫大渊源且可以做很多实用的空间计算操作的
图8 类似的,其他类型几何对象之间的空间连接你也可以根据自己的需要进行操作,值得一提的是,利用sjoin()进行空间左、右、内连接时,因为结果表依旧是GeoDataFrame,所以只会保留一列矢量列... 当主体矢量列长度为n,而输入待比较的矢量列长度为1时,返回的bool值是待比较矢量列与主题矢量列一一进行比较后的结果: ?...在geopandas中我们可以使用clip()函数来基于蒙版矢量对目标矢量进行裁切,其主要参数如下: gdf:GeoDataFrame或GeoSeries,代表将要被裁切的矢量数据集 mask:GeoDataFrame...举个实际的例子,当我们想算出整个柏林被出租车站点500米缓冲区所覆盖的步道路网总长度时,可以在上文裁切计算结果的基础上直接求得: ?...撰写本系列文章的初衷,一是因为我对pandas的高度熟悉,二是由于喜欢编程,对ArcGIS之类主要靠点击相应按钮完成任务且容易出错的空间分析软件不太喜欢,所以在了解到有这么一个与pandas有着莫大渊源且可以做很多实用的空间计算操作的
GeoSeries或GeoDataFrame中创建新的矢量数据的过程,譬如早在系列第一篇文章数据结构篇中就介绍过的bounds、exterior、interiors、boundary、centroid、...图1 而创建缓冲区时也需要遵循一定的参数,从而决定怎样向几何对象外进行缓冲,geopandas中buffer()和shapely中的buffer()方法参数一致,主要参数如下: distance:...resolution:因为在创建缓冲区时,对于构成矢量对象的每一个点,都会以对应点为中心向外创建半径=缓冲区距离的圆,而Polygon类型始终是由有限个点所构成的,因此需要近似拼接出圆形的轮廓,resolution...图5 simplify() 当原始的矢量数据因为形状复杂,包含的点较多时,会导致其文件体积较大,如果我们需要在在线地图上叠加它们,太大体积的矢量数据不仅会拖慢网络传输速度,也会给图形的渲染带来更大的压力...图13 overlay()中的主要参数如下: df1:GeoDataFrame,作为输入的第一个矢量数据集 df2:GeoDataFrame,作为输入的第二个矢量数据集 how:字符型,用于声明空间叠加的类型
这个关系在计算向量之间的角度时非常有用,因为我们可以使用 arccos 函数来从cosine值得到实际的角度。...midpoint_for_polygon(poly) return MultiPoint(midpoints) # 应用函数并创建一个包含中点的新GeoDataFrame gdf_simplify...geometry属性的GeoDataFrame?...,我验证了多次,并且在后续或者街景地图之后也进行了验证,确保不会出错,否则后续获取街景图的工作就废了。...角度NEAR_ANGLE有特殊的规定:生成的角度是输入要素(建筑物上的点)对于邻近要素(街道上的点)的角度,并且转换前的角度的表示方式是:在方法参数中使用平面方法时,角度在 -180° 到 180° 的范围内
GeoSeries或GeoDataFrame中创建新的矢量数据的过程。...,思想很简单,即为矢量数据拓展出一定宽度的边,图1展示了点、线以及面分别对应的缓冲区的示意: 图1 而创建缓冲区时也需要遵循一定的参数,从而决定怎样向几何对象外进行缓冲,geopandas中buffer...)下就是以米为单位,因此需要注意一定要先将矢量数据转换为合适的投影坐标系之后,再进行缓冲区分析才是合理有效的 resolution:因为在创建缓冲区时,对于构成矢量对象的每一个点,都会以对应点为中心向外创建半径...,包含的点较多时,会导致其文件体积较大,如果我们需要在在线地图上叠加它们,太大体积的矢量数据不仅会拖慢网络传输速度,也会给图形的渲染带来更大的压力。...keep_geom_type 有些时候我们需要做的不仅仅是面与面之间的叠加分析。 比如在计算路网相关的指标时,我们可能会需要与目标区域存在叠置关系的部分路网,这就存在面与线之间的叠加分析。
=device)) # map_location字段避免无GPU的电脑出错,因为此模型默认加载在cuda中。...大于0就会出现此bug:当您在使用DataLoader时设置num_workers大于0以使用多个子进程加载数据时,PyTorch 使用 multiprocessing 来创建这些子进程。...,通常会选择网络中的最后一个卷积层或与最后一个卷积层紧密相关的层作为目标层。...这是因为这些层通常包含关于目标类的空间信息,这对于理解网络如何“看到”和识别特定特征是非常有用的。..., x_max, y_max) # 创建一个GeoDataFrame,将边界框作为几何图形 gdf_bbox = gpd.GeoDataFrame({'geometry': bbox_geometry}
「2 颜色填充」 这里的「颜色填充」指的是以居住自由指数折线为中线,在购房自由指数折线与租房自由指数折线之间的颜色填充区域,但困难的是这里当购房自由指数高于租房自由指数时对应的颜色为浅蓝绿色,而反过来则变为灰色...譬如按照这个思路来创建东经10度到东经220度之间,以及南纬-90度到-80度之间,对应的5条纬度线和对应38个城市的经线: import geopandas as gpd from shapely.geometry...crs = '+proj=ortho +lon_0=0 +lat_0=-90' # 构建经度线并设置对应经纬度的地理坐标系 lng_lines = gpd.GeoDataFrame({ 'geometry...lat in range(-90, -79, 2)]}, crs='EPSG:4326') 构造好数据之后,将经线与纬线对应的GeoDataFrame转换到设置好的「正射投影」crs上,再作为不同图层进行叠加绘制...(10, 220, 210 / data.shape[0])]}, crs='EPSG:4326') # 居住自由指数对应的折线 line1 = gpd.GeoDataFrame({
2 颜色填充 这里的颜色填充指的是以居住自由指数折线为中线,在购房自由指数折线与租房自由指数折线之间的颜色填充区域,但困难的是这里当购房自由指数高于租房自由指数时对应的颜色为浅蓝绿色,而反过来则变为灰色...譬如按照这个思路来创建东经10度到东经220度之间,以及南纬-90度到-80度之间,对应的5条纬度线和对应38个城市的经线: import geopandas as gpd from shapely.geometry...crs = '+proj=ortho +lon_0=0 +lat_0=-90' # 构建经度线并设置对应经纬度的地理坐标系 lng_lines = gpd.GeoDataFrame({ 'geometry...lat in range(-90, -79, 2)]}, crs='EPSG:4326') 构造好数据之后,将经线与纬线对应的GeoDataFrame转换到设置好的正射投影crs上,再作为不同图层进行叠加绘制...图8 接下来我们就来为每个指标构造线与散点部分的矢量数据,并在统一转换坐标参考系到正射投影之后叠加到之前的图像上: # 为每个城市生成1条经线 lng_lines = gpd.GeoDataFrame
领取专属 10元无门槛券
手把手带您无忧上云