当前位置:首页 » 编程语言 » pythongeo

pythongeo

发布时间: 2022-02-15 18:56:45

⑴ 在python3.5下怎么安装geoplotlib,seaborn,pygal,bokeh

Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Python库。这是Bokeh与其它可视化库最核心的区别。
说明了Bokeh如何将数据展示到一个Web浏览器上的流程。

⑵ 有人用python开发GIS用户程序么

例子取自<<Learning Geospatial Analysis with Python>>

代码由两部分组成。第一部分是数据模型,第二部分是绘制数据(地图渲染)。

一、数据模型:使用python内置的列表(list),用来存储空间数据。

[python]view plain

  • #DATAMODEL

  • #Alllayerswillhaveaname,1+points,andpopulationcount

  • NAME=0

  • POINTS=1

  • POP=2

  • #Createthestatelayer

  • state=["COLORADO",[[-109,37],[-109,41],[-102,41],[-102,37]],5187582]

  • #Citieslayerlist

  • #city=[name,[point],population]

  • cities=[]

  • #AddDenver

  • cities.append(["DENVER",[-104.98,39.74],634265])

  • #AddBoulder

  • cities.append(["BOULDER",[-105.27,40.02],98889])

  • #AddDurango

  • cities.append(["DURANGO",[-107.88,37.28],17069])

  • 二、地图渲染

    使用python Turtle 绘图模块来渲染地图。其中有一个函数用来将世界坐标转换为像素坐标。

    1、首先计算地图的显示范围及设定屏幕的绘制范围

    [python]view plain

  • #MAPGRAPHICSRENDERING

  • map_width=800

  • map_height=500

  • #StateBoundingBox

  • #UsePythonmin/maxfunctiontogetboundingbox

  • minx=180

  • maxx=-180

  • miny=90

  • maxy=-90

  • forx,yinstate[POINTS]:

  • ifx<minx:minx=x

  • elifx>maxx:maxx=x

  • ify<miny:miny=y

  • elify>maxy:maxy=y

  • #Getearthdistanceoneachaxis

  • dist_x=maxx-minx

  • dist_y=maxy-miny

  • #Scalingratioeachaxis

  • #tomappointsfromworldtoscreen

  • x_ratio=map_width/dist_x

  • y_ratio=map_height/dist_y

  • 2、世界坐标到屏幕坐标的转换

    [python]view plain

  • #Functiontoconvertlat/lontoscreencoordinates

  • defconvert(point):

  • lon=point[0]

  • lat=point[1]

  • x=map_width-((maxx-lon)*x_ratio)

  • y=map_height-((maxy-lat)*y_ratio)

  • #

  • #

  • x=x-(map_width/2)

  • y=y-(map_height/2)

  • return[x,y]

  • 3、绘制地图:标注和要素图形

    [python]view plain

  • #Drawthestate

  • t.up()

  • first_pixel=None

  • forpointinstate[POINTS]:

  • pixel=convert(point)

  • printpixel

  • ifnotfirst_pixel:

  • first_pixel=pixel

  • t.goto(pixel)

  • t.down()

  • #Gobacktothefirstpoint

  • t.goto(first_pixel)

  • #Labelthestate

  • t.up()

  • t.goto([0,0])

  • t.write(state[NAME],align="center",font=("Arial",16,"bold"))

  • #Drawthecities

  • forcityincities:

  • pixel=convert(city[POINTS])

  • t.up()

  • t.goto(pixel)

  • #Placeapointforthecity

  • t.dot(10)

  • #Labelthecity

  • t.write(city[NAME]+",Pop.:"+str(city[POP]),align="left")

  • t.up()

  • #Performanattributequery

  • #Question:?

  • #Writetheresultbutmakesureit'sunderthemap

  • biggest_city=max(cities,key=lambdacity:city[POP])

  • t.goto(0,-1*((map_height/2)+20))

  • t.write("Thebiggestcityis:"+biggest_city[NAME])

  • #Performaspatialquery

  • #Question:Whichisthewesternmostcity?

  • #Writetheresultbutmakesureit'sundertheotherquestion

  • western_city=min(cities,key=lambdacity:city[POINTS])

  • t.goto(0,-1*((map_height/2)+40))

  • t.write("Thewestern-mostcityis:"+western_city[NAME])

  • #Hideourmappen

  • t.pen(shown=False)

  • t.done()


  • 三、结果






⑶ python geohash怎么安装

打开命令提示符
键入【pip install geohash】(只输入【】内的内容)
回车
记得要联网操作

⑷ 使用Python实时将gps返回的经纬度转化为图片

主要就是做了两件事情:
1.生成一张有文本信息的JPG图片
2.写入EXIF信息

生成照片需要PIL和libjpeg

import Imageimport ImageDrawimport ImageFontdef create_pic(path, text=[], type='jpeg'):
img = Image.new("RGB", (2448, 3264), '#37b6ce')#颜色和大小
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('ziti.ttf', 120)#ttf是字体,120是字号
for h in range(0, len(text)):#多行文本
draw.text((256, 256 + 120 * h), text[h], font=font)
img.save(path, type)#保存
# img.show()

读写EXIF信息需要pyexiv2,获取google的经纬度需要geopy
顺便说下经纬度的表示:
一般exif里看到的都是这样的57°55'56.6",是度,分,秒这么展示的,google上获取来的是十进制的57.9323888888888
所以需要转换一下再写进去
公式:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888

etemplate=pyexiv2.ImageMetadata('IMG_4408.JPG')template.read()#exif信息很多,所以找个真正手机拍摄的照片当模版googlev3=geopy.GoogleV3()place,gps=googlev3.geocode(location)#获取gps信息,location写地名,比如‘北京王府井’,偶尔会被墙,最好挂个代理defset_exif(path,date_time=None,gps=()):
"""
datetime=2014:10:0412:41:38
geo=(lat=39.12315,lng=115.12231)
"""
metadata=pyexiv2.ImageMetadata(path)
metadata.read()
forkintemplate.exif_keys:
metadata[k]=pyexiv2.ExifTag(k,template[k].value)
ifnotdate_time:
date_str=pyexiv2.utils.exif(date_time)
metadata['Exif.Photo.DateTimeOriginal']=date_str
metadata['Exif.Photo.DateTimeDigitized']=date_str
metadata['Exif.Image.DateTime']=date_str
iflen(geo)>0:
c_lat=decimal2coordinate(geo[0],['S','N'])
c_lng=decimal2coordinate(geo[1],['W','E'])
metadata["Exif.GPSInfo.GPSLatitude"]=coordinate2rational(c_lat[0],c_lat[1],c_lat[2])
metadata["Exif.GPSInfo.GPSLatitudeRef"]=c_lat[3]
metadata["Exif.GPSInfo.GPSLongitude"]=coordinate2rational(c_lng[0],c_lng[1],c_lng[2])
metadata["Exif.GPSInfo.GPSLongitudeRef"]=c_lng[3]
else:
metadata._delete_exif_tag("Exif.GPSInfo.GPSLatitude")
metadata._delete_exif_tag("Exif.GPSInfo.GPSLatitudeRef")
metadata._delete_exif_tag("Exif.GPSInfo.GPSLongitude")
metadata._delete_exif_tag("Exif.GPSInfo.GPSLongitudeRef")
metadata.write()defdecimal2coordinate(value,loc):
"""
loc=lat=>["S","N"],lng=>["W","E"]
retrunD,M,S,locate
"""
ifvalue<0:
loc_value=loc[0]
elifvalue>0:
loc_value=loc[1]
else:
loc_value=""
abs_value=abs(value)
deg=int(abs_value)
t1=(abs_value-deg)*60
min=int(t1)
sec=round((t1-min)*60,5)
return(deg,min,sec,loc_value)defcoordinate2rational(D,M,S):
return(fractions.Fraction(D,1),fractions.Fraction(int((M+S/60)*100),100),fractions.Fraction(0,1))

⑸ 如何用Python绘制JS地图

Folium是建立在Python生态系统的数据整理(Datawrangling)能力和Leaflet.js库的映射能力之上的开源库。用Python处理数据,然后用Folium将它在Leaflet地图上进行可视化。

概念

Folium能够将通过Python处理后的数据轻松地在交互式的Leaflet地图上进行可视化展示。它不单单可以在地图上展示数据的分布图,还可以使用Vincent/Vega在地图上加以标记。

这个开源库中有许多来自OpenStreetMap、MapQuest Open、MapQuestOpen
Aerial、Mapbox和Stamen的内建地图元件,而且支持使用Mapbox或Cloudmade的API密钥来定制个性化的地图元件。
Folium支持GeoJSON和TopoJSON两种文件格式的叠加,也可以将数据连接到这两种文件格式的叠加层,最后可使用color-brewer
配色方案创建分布图。

安装

安装folium包

开始创建地图

创建底图,传入起始坐标到Folium地图中:

importfolium

map_osm= folium.Map(location=[45.5236, -122.6750]) #输入坐标

map_osm.create_map(path='osm.html')

Folium默认使用OpenStreetMap元件,但是Stamen Terrain, Stamen Toner, Mapbox Bright 和MapboxControl空间元件是内置的:

#输入位置,tiles,缩放比例

stamen =folium.Map(location=[45.5236, -122.6750], tiles='Stamen Toner',zoom_start=13)

stamen.create_map(path='stamen_toner.html')#保存图片

Folium也支持Cloudmade 和 Mapbox的个性化定制地图元件,只需简单地传入API_key :

custom =folium.Map(location=[45.5236, -122.6750], tiles='Mapbox',

API_key='wrobstory.map-12345678')

最后,Folium支持传入任何与Leaflet.js兼容的个性化地图元件:

tileset= r'http://{s}.tiles.yourtiles.com/{z}/{x}/{y}.png'

map =folium.Map(location=[45.372, -121.6972], zoom_start=12,

tiles=tileset, attr='My DataAttribution')

地图标记

Folium支持多种标记类型的绘制,下面从一个简单的Leaflet类型的位置标记弹出文本开始:

map_1 =folium.Map(location=[45.372, -121.6972], zoom_start=12,

tiles='Stamen Terrain')

map_1.simple_marker([45.3288,-121.6625], popup='Mt. Hood Meadows')#文字标记

map_1.simple_marker([45.3311,-121.7113], popup='Timberline Lodge')

map_1.create_map(path='mthood.html')

Folium支持多种颜色和标记图标类型:

map_1 =folium.Map(location=[45.372, -121.6972], zoom_start=12,tiles='Stamen Terrain')

map_1.simple_marker([45.3288,-121.6625], popup='Mt. Hood Meadows',marker_icon='cloud') #标记图标类型为云

map_1.simple_marker([45.3311,-121.7113], popup='Timberline Lodge',marker_color='green') #标记颜色为绿色

map_1.simple_marker([45.3300,-121.6823], popup='Some OtherLocation',marker_color='red',marker_icon='info-sign')

#标记颜色为红色,标记图标为“info-sign”)

map_1.create_map(path='iconTest.html')

Folium也支持使用个性化的尺寸和颜色进行圆形标记:

map_2 =folium.Map(location=[45.5236, -122.6750], tiles='Stamen Toner',

zoom_start=13)

map_2.simple_marker(location=[45.5244,-122.6699], popup='The Waterfront')

简单树叶类型标记

map_2.circle_marker(location=[45.5215,-122.6261], radius=500,

popup='Laurelhurst Park',line_color='#3186cc',

fill_color='#3186cc')#圆形标记

map_2.create_map(path='portland.html')

Folium有一个简便的功能可以使经/纬度悬浮于地图上:

map_3 =folium.Map(location=[46.1991, -122.1889], tiles='Stamen Terrain',zoom_start=13)

map_3.lat_lng_popover()

map_3.create_map(path='sthelens.html')

Click-for-marker功能允许标记动态放置:

map_4 =folium.Map(location=[46.8527, -121.7649], tiles='Stamen Terrain',zoom_start=13)

map_4.simple_marker(location=[46.8354,-121.7325], popup='Camp Muir')

map_4.click_for_marker(popup='Waypoint')

map_4.create_map(path='mtrainier.html')

Folium也支持来自Leaflet-DVF的Polygon(多边形)标记集:

map_5 =folium.Map(location=[45.5236, -122.6750], zoom_start=13)

map_5.polygon_marker(location=[45.5012,-122.6655], popup='Ross Island Bridge',fill_color='#132b5e', num_sides=3,radius=10)#三边形标记

map_5.polygon_marker(location=[45.5132,-122.6708], popup='Hawthorne Bridge',fill_color='#45647d', num_sides=4,radius=10)#四边形标记

map_5.polygon_marker(location=[45.5275,-122.6692], popup='Steel Bridge',fill_color='#769d96', num_sides=6, radius=10)#四边形标记

map_5.polygon_marker(location=[45.5318,-122.6745], popup='Broadway Bridge',fill_color='#769d96', num_sides=8,radius=10) #八边形标记

map_5.create_map(path='bridges.html')

Vincent/Vega标记

Folium能够使用vincent 进行任何类型标记,并悬浮在地图上。

buoy_map= folium.Map(location=[46.3014, -123.7390], zoom_start=7,

tiles='StamenTerrain')

buoy_map.polygon_marker(location=[47.3489,-124.708], fill_color='#43d9de',radius=12, popup=(vis1, 'vis1.json'))

buoy_map.polygon_marker(location=[44.639,-124.5339], fill_color='#43d9de',radius=12, popup=(vis2, 'vis2.json'))

buoy_map.polygon_marker(location=[46.216,-124.1280], fill_color='#43d9de',radius=12, popup=(vis3, 'vis3.json'))

GeoJSON/TopoJSON层叠加

GeoJSON 和TopoJSON层都可以导入到地图,不同的层可以在同一张地图上可视化出来:

geo_path= r'data/antarctic_ice_edge.json'

topo_path= r'data/antarctic_ice_shelf_topo.json'

ice_map= folium.Map(location=[-59.1759, -11.6016],tiles='Mapbox Bright', zoom_start=2)

ice_map.geo_json(geo_path=geo_path)#导入geoJson层

ice_map.geo_json(geo_path=topo_path,topojson='objects.antarctic_ice_shelf')#导入Toposon层

ice_map.create_map(path='ice_map.html')

分布图

Folium允许PandasDataFrames/Series类型和Geo/TopoJSON类型之间数据转换。Color Brewer 颜色方案也是内建在这个库,可以直接导入快速可视化不同的组合:

importfolium

importpandas as pd

state_geo= r'data/us-states.json'#地理位置文件

state_unemployment= r'data/US_Unemployment_Oct2012.csv'#美国失业率文件

state_data= pd.read_csv(state_unemployment)

#LetFolium determine the scale

map =folium.Map(location=[48, -102], zoom_start=3)

map.geo_json(geo_path=state_geo,data=state_data,

columns=['State', 'Unemployment'],

key_on='feature.id',

fill_color='YlGn',fill_opacity=0.7, line_opacity=0.2,

legend_name='Unemployment Rate(%)')

map.create_map(path='us_states.html')

基于D3阈值尺度,Folium在右上方创建图例,通过分位数创建最佳猜测值,导入设定的阈值很简单:

map.geo_json(geo_path=state_geo,data=state_data,

columns=['State', 'Unemployment'],

threshold_scale=[5, 6, 7, 8, 9,10],

key_on='feature.id',

fill_color='BuPu',fill_opacity=0.7, line_opacity=0.5,

legend_name='Unemployment Rate(%)',

reset=True)

map.create_map(path='us_states.html')

⑹ 如何生成geojson格式的tiles

转载自 需下载的工具有:python:python-2.6
Python Setup tools :setuptools-0.6c11.win32-py2.6
GDAL:GDAL-1.9.2.win32-py2.6
TileStache:TileStache-1.42.1

1.首先安装python2.6 并配置环境变量
2.安装Setup tools (方面安装其他软件)和GDAL
3.使用Setup tools安装TileStache, ModestMaps, PIL(TileStache 依赖于这两项)
easy_install tilestache
easy_install PIL
easy_install ModestMaps

4.在下载的TileStache中的文件夹中配置cfg文件
{
"cache":
{
"name": "Disk",
"path": "/tmp/stache",
"umask": "0000"
},
"layers":
{
"postgis":
{
"provider": {"name": "vector", "driver": "Postgresql",
"parameters": {"dbname": "postgis", "user": "postgres","password":"postgres",
"table": "mainroad"}}
}
}
}
}

5.然后用tilestache-seed进行切片

6.结果

后面会推出矢量切片在OL中的应用。OpenLayers中加载矢量切片,可有效解决大数据量的问题

⑺ centos 系统下python 导入GeoIP错误,可是我已经安装了GeoIP了 ImportError: No mole named GeoIP

如果你是想要获取经纬度等信息,试试安装这个模块

pip install python-geoip-geolite2

php 有没有类似python中geohash.expand的函数

geohash是扩展库吧

⑼ python调用百度地图这个怎么搞

不是所有的地址都能得得一个有效的地理编码的,需要检查status是否为0。

参考以下代码:

#coding=utf-8

fromurllib.requestimporturlopen,quote
fromjsonimportloadsasloadjson

ak='--------------------------------'

def_url(service,**kv):
qstr=''
url='http://api.map..com/'
+service+'/v2/'
+'?output=json'
+'&ak='+ak
fork,vinkv.items():
url+='&'+k+'='+quote(v)
returnurl

defmapapi(service,**kv):
data=urlopen(_url(service,**kv)).read().decode('utf-8')
returnloadjson(data)


geo=mapapi('geocoder',address='gd')
ifgeo['status']==0:
try:
print(geo['result']['location']['lng'])
except(Exception,):
print(geo)
else:
print('{}({})'.format(geo['msg']if'msg'ingeo.keys()elsegeo['message'],
geo['status']))

⑽ 有哪些 GIS+Python 的开发经验值得分享

GIS 和 python 的结合有很多种可能性

Arcpy 参考ArcPy and ArcGIS (豆瓣), pyQGIS 参考PyQGIS Developer Cookbook
Geopython GIS相关库

GDAL 参考 Welcome to the Python GDAL/OGR Cookbook!
各种空间数据库,如 spatialite 参考 SpatiaLite Cookbook
基础库(抽象库)
GDAL 不多说,GIS万物本源
Proj.4 制图学投影转换库
geojson geojson数据处理,点线面
高级库
Shapley GIS的图像处理
Fiona GIS数据读入写出
Rtree Rtree空间索引
pyproj Proj.4的接口扩展
OWSLib WMS地图服务发放
basemap 画地图
超高级库
geopandas 整合了pandas,shapely,fiona,descartes,pyproj和rtrees可以直接用于数据处理
geodjango django出品,保护GDAL,GEOS等可以发送地图服务
参考 Python 笔记三:Geopython GIS相关库

而如今,javascript在互联网的地位也变得越来越重要,GIS+JS的项目也氤氲而生,所以问题来了。参考:有哪些GIS+JavaScript(node.js)的开发经验值得分享? - Node.js

或者关注我的博客,写得不是很好,希望各路大神多多留言指导。

Awesome GIS(GIS Tech Stack技术栈)
Geomatics专栏点此:Geomatics(GIS,GPS,RS,Surveying)
语言
Python 最好的快速开发语言,是一门API艺术
awesome-python
1简单的入门
2总结入门坑及基础资源
3Geopython GIS相关库
4Python的常用库入门
5Flask框架
6入门爬虫坑--网页数据压缩(python deflate gzip)
7Requests爬虫技巧
Node.js 最炙手可热的网络技术源泉,可用于WebGIS
awesome-javascript
1常用Global库
2入门及GeoNode.js GIS相关库
前段
Leaflet 兼容移动端,和现代的一些框架一样优先考虑移动端
1leaflet入门
2简单插件编写leaflet-pip-v2
3进阶插件编写geojsonFilter
Mapbox总有人讨论“Mapbox VS Leaflet?”这是个烂问题,Mapbox是Leaflet的超集,就像Typescript和Javascript之间的关系一样
Openlayer3扯淡大叔教程
Turf js层面做出简单的空间分析
后端
Geoserver 基于Java的地理信息服务的发布,使用简单
Mapserver 基于C语言的地理信息服务的发布,内存占用小
GDAL 数据格式转换
1GDAL命令行入门
2python for GDAL
3gdal CLI Cheat Sheet
数据格式
GeoJSON 开源地理信息JSON格式
awesome-geojson
geojson-js-utils 空间数据简单处理js实现
geojson-python-utils空间数据简单处理python实现
TopoJSON 开源地理信息JSON格式,大小要比GeoJSON小40%
TileJSON 瓦片数据包装的JSON格式,用的不多
WKT&WKB 文本标记语言表示矢量数据
WKT&WKB 笔记一:格式介绍
数据库
Spatialite 空间数据的查询等处理,小项目足矣
1简单的入门
2CLI Cheat Sheet
3python for Spatialite
4NET平台使用spatilite扩展
5Spatiliate2GeoJson数据的转换
Postgresql 大型空间数据项目
MBTILES 承载瓦片的数据,快速索引
1入门与简单应用
瓦片渲染
Global Mapper 专门用作已有栅格图像切片
Mapnik 专门用于矢量数据的切片
TileMill 在矢量数据渲染时,运用CartoCSS对矢量数据赋予样式
数据处理
QGIS 开源GIS数据处理桌面软件,其中包含Grass,SAGA两个学术界开源GIS平台
1简单的介绍
2地图综合
Mapsharper 数据综合神器
1地图综合神器
数据资料
地理空间数据云 没想到数据来的这么快
填坑
1网页端JS的缓存问题
2Angular遇到的一些坑
3SpatialiteSharp的使用坑
整个技术栈主要针对的是轻量或者小项目去考虑,运用一些流行的尽可能开源的工具去做,这是我的一些想法和笔记,详情参考从mapbox的开源工具看Web GIS的发展,希望能给您一点点帮助。PS:我在github上看到一个awesome gis,并非我主导的,希望各位GISer可以一起参与修改。
转载,请表明出处。总目录Awesome GIS

热点内容
电脑怎么看网络密码 发布:2025-01-10 14:56:40 浏览:108
java调用shell脚本参数 发布:2025-01-10 14:43:51 浏览:52
php数组计数 发布:2025-01-10 14:23:03 浏览:474
s盒算法 发布:2025-01-10 14:16:42 浏览:643
c语言用二分法求方程 发布:2025-01-10 14:15:45 浏览:220
广场舞加密 发布:2025-01-10 14:13:21 浏览:521
网络密码显示低安全性是什么意思 发布:2025-01-10 14:11:49 浏览:782
耻辱2博士保险箱密码是多少 发布:2025-01-10 14:11:41 浏览:101
如何把服务器搭在自己电脑 发布:2025-01-10 14:10:57 浏览:585
水晶可以存储 发布:2025-01-10 14:09:35 浏览:391