python開發gis
❶ 有哪些 GIS+python 的開發經驗值得分享
AngularJS 與 jQuery 等傳統操作 DOM 的思想有所不同,
對於 jQuery 等,一般是先有完整 DOM 然後在這些 DOM 的基礎上進行二次調教。
而 AngularJS 等框架則是 根據 數據模型 以及其對應的 DOM 模版,然後通過模版像搭積木那樣組合頁面。
顯然的,前者在 SEO 上有天然優勢;而後者,搜索引擎還只能拿到某個模版,而無內容。
暫時沒想到有什麼特別好的解決方案,或許,對於內容頁,可以繼續使用傳統方式,而只在需要更多交互的地方應用 AngularJS,特別是在移動端應用上。
同理適用於各種 前端的 MVC 框架,後端只要為前端提供數據介面,而不再需要為其拼接 HTML.
## 模塊化
AngularJS 也是遵循 AMD 的。(AMD 是啥,參考:使用 AMD、CommonJS 及 ES Harmony 編寫模塊化的 javaScript)
雖然它也可以按照傳統代碼方式來寫(其首頁介紹的用法 AngularJS — Superheroic JavaScript MVW Framework),但是,既然都提供了這么一種模塊的方法,為何不用上呢
angular.mole('app', [
'moleA',
'moleB',
])
.controller('MainCtrl', [
'$scope',
function ($scope) {
}]);
而且,這種寫法還可以方便做代碼的合並與壓縮,在後面 Grunt 自動化 一節中,就會提到使用 Nodejs/Grunt 來自動的做這些事情。
## 可復用模版 or 業務邏輯模版
今年 Google 開發者大會中 提到的 Polymer(Welcome - Polymer)
這貨讓人感覺像是 Angular Directives 的進化。
而 Directives 做的事,就是把一堆 DOM 封裝為一條或者一組 自定義的 HTML標簽,作為可復用的模版,以供組裝業務調用。 Demos 可參看:Angular directives for Twitter's Bootstrap
當然,為了方便修改,很多時候在做 directive 的時候需要將 template 用 templateUrl 代替,
不用擔心文件的碎片化,不利於前端載入 Grunt 自動化 一節 會提到如何合並這些碎片化的 模版。
Directives 是作為可復用的模版,
而業務邏輯則是一般是一個業務對應一個 html 及其的 controller.
❷ arcgis利用 python設置高程顏色
1、四色填充演算法—回溯法。
2、ArcGIS生成鄰接表。
3、基於Python編寫工具計算每個省份的顏色。
4、在ArcGIS中添加腳本工具。
5、運行腳本工具。
6、以上就是arcgis利用python設置高程顏色的方法。
❸ 向精通ArcGIS——python腳本開發的同學請教
上段代碼運行出錯就是因為程序認為No是個字元串啊,把No直接改成1運行沒有問題 Traceback (most recent call last): File "C:\Documents and Settings\Administrator\桌面\a.py", line 18, in select("XYSheet1.shp","XYSheet1_Select1.shp","\"礦區編號\" =No") File "C:\Documents and Settings\Administrator\桌面\a.py", line 16, in select arcpy.Select_analysis(in_features, out_feature_class, where_clause) File "E:\ArcGIS\Desktop10.0\arcpy\arcpy\analysis.py", line 88, in Select raise eExecuteError: ERROR 999999: 執行函數時出錯。指定了不存在的列。指定了不存在的列。執行(Select)失敗。
❹ 使用VScode配置Python GIS開發環境
Python是進行GIS開發和數據處理的常用語言,如何用宇宙第一IDE進行GIS開發,為其配置Python環境是一個簡單的入門問題。本文基於ArcGIS Pro自帶的conda環境進行配置,實現可以使用GIS分析工具和其他Python模塊。
略
對於常用的站點包ArcGIS Pro已經包括,簡單的點擊增加就可以進行導入
❺ arcgis 怎麼用python做統計分析
方法/步驟
1
打開arcmap軟體,點擊工具欄上的ArcToolbox工具箱,在工具箱裡面選擇要進行數據處理的工具(工具的選擇視數據處理的內容而定),本文選擇了「Define Projection」定義投影的工具進行說明。
雙擊此工具,在彈出的工具窗口點擊右下角的「Show Help>>」按鈕。
2
點擊「Tool Help」按鈕,此時就打開了軟體的幫助文檔並定位到了此工具(define projection)對應的頁面,往下拉動滾動條,定位到此工具的python腳本的內容:
Syntax 介紹了此工具腳本的語法
Code Sample 介紹了腳本使用的例子
拷貝腳本使用例子裡面的代碼。
3
在軟體的主界面點擊「Geoprocessing」菜單-->點擊「Python」菜單項,即出現內嵌在arcigis中的python工具窗口。
python工具窗口的左邊是代碼編輯區域,右邊是信息提示區域。
4
把第2步拷貝的代碼語句粘貼到python工具窗口的左邊區域,修改一下工具腳本的參數(視具體工具和數據而定),連續點擊兩下回車鍵。
5
等待腳本程序的執行完成,完成之後在桌面右下角會彈出提示信息,同時pythong工具窗口的右邊區域也會有具體的工具腳本執行信息。
6
執行完成之後,在arcmap載入處理過的數據,右鍵查看屬性,可以看到通過此工具腳本(define projection)進行投影定義的數據已經具有了投影參數。
http://jingyan..com/article/eae07827ba96a51fec548513.html
❻ 有人用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])
#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
#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]
#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 Turtle 繪圖模塊來渲染地圖。其中有一個函數用來將世界坐標轉換為像素坐標。
1、首先計算地圖的顯示範圍及設定屏幕的繪制范圍
[python]view plain
2、世界坐標到屏幕坐標的轉換
[python]view plain
3、繪制地圖:標注和要素圖形
[python]view plain
三、結果
❼ arcgis怎麼用python
arcgis軟體中有專門的python窗口
❽ Arcgis Engine二次開發用python可以嗎
1.自定義工具箱是什麼
就像名字一樣,自定義工具箱是由個人創建的工具箱,就像下面這樣,可以理解成一個 .tbx 後綴的壓縮包,每一個工具箱中都可以添加多個工具集、腳本工具甚至模型構建器工具。
一大堆工具箱
1.1如何添加自定義工具箱(熟悉可跳過)
第一步:右鍵點擊 ArcToolbox -> 添加工具箱
第二步:在打開的添加工具箱窗口中選中需要添加的工具,然後點擊右下角的打開即可。
添加工具箱到 Arcmap
1.2如何創建自定義工具箱
點擊右上角的紅色工具箱符號,可以新建並重命名一個工具箱。
我們這里新創建了一個海怪工具箱,用於之後的教程演示。
新建工具箱
1.3添加一個腳本工具
新創建的工具箱就像一個大箱子,箱子呢是用來裝工具的,你可以直接在工具箱中右鍵,然後點擊添加,再點擊腳本,進而創建一個腳本工具;
亦或是右鍵,點擊新建,再點擊工具集,創建一個可以自定義名稱的工具集,然後在工具集里新建一個腳本工具。
這里添加的腳本工具只是一個空殼,我們後面會繼續完善。
新建的工具箱位於 ../Chapter7/海怪工具箱.tbx。
2.工具箱的封裝
工具箱由三部分組成,其中有兩部分需要我們來控制:
一是輸入界面:確定工具箱輸入界面的參數定義和設置;
二是 Python 源代碼:功能的實現,為 .py 後綴的腳本文件;
三是對參數行為提供額外控制的可選驗證代碼,其位於工具箱中(這部分自帶,基本上不用修改)。
所以下面的重點就是輸入界面和 Python 源代碼。
2.1工具箱輸入界面
工具箱輸入界面,或者說圖形交互界面(GUI),就像下面的幾張圖一樣,從該界面我們可以控制工具的行為,自定義輸入界面然後配合 Python 腳本,可以實現多種客制化的功能。
簡單來說,你可以認為輸入界面是依託於 Arcmap 的「前端」,腳本代碼就是負責運行的「後端」。
導入導出工具:
為方便演示,製作一個非常簡單的工具箱,它的功能呢就是把輸入的要素類(資料庫或者 shp )再導出來而已,是完全沒有用的導入導出功能啦,不過作為演示還是非常不錯的。
製作完成後的導入導出工具的界面
第一步:
在工具箱中,右鍵點擊添加,再點擊腳本,然後修改名稱,修改成你想要的名字,勾選存儲相對路徑名,然後點擊下一頁。
修改名稱
第二步:
然後添加腳本文件,添加該腳本文件 ../Chapter7/toolscript/input_and_output.py,讀者可以在最後的下載包中找到該文件。
然後點擊下一頁。
鏈接python腳本
第三步:
控制用戶交互界面。ArcGIS 在這里內置了一整套簡單但是實用的圖形控制項,比如輸入菜單、下拉框、多選框、單選等,藉由這些圖形控制項我們可以控制腳本工具的圖形交互界面。
我們這里使用的腳本功能非常簡單,上面也有說到:輸入一個矢量要素類,不做任何處理,然後輸出一個矢量要素類。
為了匹配這個腳本,我們需要設置一個輸入圖層的控制項,同時為了能順利的輸出,也需要一個輸出圖層的控制項,注意一個是輸入一個是輸出。
從下圖可以看到,左邊(左邊的橙色框)是顯示名稱,其中輸入輸出控制項的名稱以及輸入控制項的名稱,這里命名為輸入要素和輸出要素;然後在右邊(右邊的橙色框)的數據類型下拉框中,我們選擇要素圖層,這里只能做選擇,不能任意輸入。
設置名稱和數據類型
那麼輸入輸出是如何區分的呢?
選中輸入要素(變成藍色),然後可以看到下方(下方橙色框)的參數屬性設置選項卡,這里可以對參數進行調整。
參數選項
① 類型:有三種,一般只會用到 Required 和 Optional,表示必須和可選,用於控制參數是否可以忽略不填;
② 方向: 兩種,Input 和 Output,表示輸入和輸出,大部分情況都是使用 Input 來獲得參數,Output 用於獲得最後的成果數據,像是矢量、柵格或者圖表;
③ 多值:Yes 或者 No,用於輸入多個相同類型的數據,工具打開後就是下面這樣,在輸入要素中可輸入多個要素類;
④ 默認:設置一個控制項的默認值,直接輸入即可。可配合多值一同使用,使用 ; (英文的分號)分開,
結果如下,可以看到一打開該工具就已經填充上了預設的多個默認值(報錯是因為數據類型不是要素圖層);
⑤ 環境:工具箱的環境設置,比如掩膜、容差范圍、默認資料庫位置等,一般不預先設置;
⑥ 過濾器:選擇文件類型可以在選擇文件時只顯示特定格式的文件;
⑦ 獲取自:指定數據的獲取源。這是個什麼意思呢?比如我們想要獲取圖層A的某個欄位,獲取源就是圖層A。
以下面這種圖作為例子,新增名為欄位的控制項(上方的橙色框),數據類型也是欄位,然後參數屬性中獲取自選擇輸入要素(下方橙色框)。
設置欄位控制項
點擊完成後,打開腳本工具。在輸入要素框中選擇一個圖層,然後再點擊獲取欄位,如下就可以選擇圖層中的欄位了。
獲取圖層的欄位
⑧ 符號系統:在最下面還有一個符號系統,通常只能作用於輸出的矢量圖層(方向:Output),可為輸出圖層指定設置好的 lyr 文件樣式。
設置符號系統
第四步:
點擊右下方的完成,那麼腳本工具的輸入界面就完成了。
2.2 Python 腳本
工具箱輸入界面和 Python 代碼要相互配合才行,工具箱界面中的輸入、輸出以及各種各樣的參數,在 Python 腳本文件中都得一一對應上,將輸入界面中的各個參數傳給 Python 腳本,這樣才能讓 Python 腳本按照預期的效果正常運行。
看上去有點麻煩,但實際上 arcpy 中提供了現成的函數就可以直接獲得參數。
①參數對接(獲取)
至於如何對接參數,我們使用剛剛的那個腳本文件舉例:
../Chapter7/toolscript/input_and_output.py
# -*- coding:utf-8 -*-
import arcpy
#▶1◀
input_lyr = arcpy.GetParameterAsText(0)
output = arcpy.GetParameterAsText(1)
if __name__ == '__main__':
lyr = arcpy.mapping.Layer(input_lyr)
arcpy.CopyFeatures_management(lyr, output)
▶1◀:arcpy 提供了 GetParameterAsText(index) 函數,該函數根據輸入界面的排序號碼獲得指定的參數。比如 GetParameterAsText(0) 獲得的就是輸入圖層參數, GetParameterAsText(1) 獲得的就是第二個參數,也就是輸出圖層參數。
如果有更多參數,以此類推。
②參數對接中應該注意的情況
GetParameterAsText(index) 從輸入界面獲得的參數都會轉變成字元串,沒錯都是字元串。
如果你只是輸入輸出地址這種,那麼沒有問題,因為地址本來就是字元串,但是如果你設置了一個選擇長度范圍的長整型的控制項、亦或是某種布爾值選擇,最後輸入到 python 腳本這里都會變成字元串。
整數變成字元串,使用 int(str) 規避;
布爾型變成字元串,True 變成了 "True",False 變成了 "False",這樣就不能判斷真假了,需要寫一個判斷語句或者隨便你,方法很多;
還有就是一個輸入控制項多值的情況,所有值根據先後連接成一個字元串,中間由 、(英文分號)間隔,可以使用 split 函數分開;
❾ 有哪些 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
❿ 在GIS和測繪領域python和C#哪個更實用
Python適合做數據和文件處理應用,C#適合做具有UI交互的應用。
至於哪個實用的問題,在實際工作中遇到的就是實用的,只學不用的都不實用。