さまざまなGISプラットフォームで使用されているプログラミング言語は何ですか?[閉まっている]


8

プログラマーがGISの知識を持っていないが、自分のプログラミングスキルを活用してGISを利用したいとします。特定の言語を使用するさまざまなGISプラットフォーム、パッケージなどをリストしてください。

(私は、提案されているように、StackExchangeのコードフォーマット機能の簡単なテストを行うことを考えていました。これは、有用な回答のコンテキストで行われると思います。)

回答するときに、言語が以下にリストされているものである場合は、コードスニペットを投稿し、フォーマットをテストして、機能することを確認してください。meta-stackoverflowに関するJeff Atwoodの回答の抜粋を次に示します。

仕様は次のとおりです。

<!-- language: lang-or-tag-here -->

    code goes here

<!-- language: lang-or-tag-here -->

    code goes here

タグまたはprettify言語コードのいずれかを使用して指定できますが、prettify言語コードは、タグが設定されている言語に関係なく常に機能することが保証されています。

<!-- language-all: lang-or-tag -->以下のすべてのコードブロックに特定の強調表示を使用するために使用します。

サポートされているprettifyコード言語の完全なリストは次のとおりです。

  • lang-none
  • lang-default
  • lang-bsh
  • lang-c
  • lang-cpp
  • lang-cs
  • lang-csh
  • lang-css
  • lang-hs
  • lang-html
  • lang-java
  • lang-js
  • lang-lisp
  • lang-lua
  • lang-ml
  • lang-perl
  • lang-php
  • lang-py
  • lang-proto
  • lang-rb
  • lang-scala
  • lang-sh
  • lang-sql
  • lang-vb
  • lang-xml

回答:


11

一部の地理空間スクリプト言語:

1)Python / Jython

Python / Jythonのみ:

PythonとJythonは、osgeo(GDAL / OGR)、PySAL、Shapely、Fiona、Pyshpなどのモジュールを使用して、ソフトウェアなしで地理空間データを処理するために単独で使用できます。PythonPackage Index、Topic:GISまたはGeoscript(Jython)を参照してください。。GSTには多くの例があります

アプリケーションのスクリプト言語として

QGIS、GRASS GIS、GvSIG、OpenJumpまたはGeoserver(およびArcGIS、上記を参照)では、スクリプトにPython / Jythonを使用します。

  • Quantum GIS(Python、1.8、マスターバージョンの変更)
from qgis.core import *
layer = qgis.utils.iface.activeLayer()
for elem in layer.selectedFeatures():
        geom= elem.geometry()
        attrs = elem.attributeMap()
  • GRASS GIS(Python
from grass.script import raster as grassr
grassr.raster_info('s_newfrst3@moi')
{'north':118869.900569, 'timestamp': '"none"', 'min': -456.08587646484398,
'datatype': 'FCELL', 'max': 265.500732421875, 'ewres':
 14.008076920000001, 'vertical_datum': '', 'west': 164160.653425,
 'units': '', 'title': ' (s_newfrst3)', 'east': 176641.849961, 'nsres':
  13.976472729999999, 'south': 112552.534895}
  • GvSIG(Jython
from gvsig import *
layer = currentLayer()
features = layer.features()
for feature in features:
  geom = feature.geometry()
  values = feature.getValues()
  • OpenJump(Jython
from org.openjump.util.python.JUMP_GIS_Framework import *
layer = getSelectedLayers()
for i in layer.iterator():
    print layer.name  
# first element of the layer
fc = layer[0].featureCollectionWrapper
for elem in range(fc.size):
    obj = fc.features[elem] 
    geom = obj.getGeometry()
  • GeoServer(Jython
from geoserver import Catalog
cat = Catalog('aff_geol')
print cat.stores()
[u'affleurements', u'cartes']
st = cat['affleurements']
print st.layers()
[u'affs']
l = st['affs']
print l.count()
3214
print l.bounds()
(107206.74,148102.45,114110.46,157514.40, EPSG:31370)

また、Java Topology SuiteJython)などの他のJavaライブラリを使用することもできます。

import sys
sys.path.append('.../jts-1.8.0/lib/jts-1.8.jar')   
from com.vividsolutions.jts.geom import Point

2)バッシュ

GRASS GISはBash(シェルとスクリプト(.sh))を使用します

GRASS 6.4.2 (geol):~ > v.out.ascii in=ligneprofil format=standard | grep '^ '|\r.profile -c in=MNT res=30 output=profil.pts

3)R(prettifyコード言語なし)

すべての地理空間処理にRを使用できます。CRANタスクビュー:空間データの分析を参照してください。

library(maptools)
geol <-readShapePoly("cal.shp")
library(rgdal)
geol = readOGR(dsn=".", layer="cal")
library(PBSmapping)
geol = importShapefile("cal.shp")
library(shapefiles)
geol <- read.shapefile("cal")
# PostGIS
geol = readOGR("PG:dbname=test", "cal")

GRASS GISはRを直接使用することもできます。

GRASS 6.4.2 (geol):~ > R
R version ....
> library(spgrass6) 
> G <- gmeta6() # paramètres de Grass, région etc.
> montrait <- readRAST6(c("geologie", "mnt"),cat=c(TRUE, FALSE),  ignore.stderr=TRUE,plugin=NULL)

4)BeanShell(Java)

OpenJumpはBeanshell(コンソールまたはスクリプト)も使用できます

layer = wc.layerManager .getLayer("road").featureCollectionWrapper;
getLongest() {
    max = -1;
    for (f : layer.features) { length = f.geometry.length; if (f.geometry.length > max) {max = length; result = f;}
}
return result;
print(getLongest().ID);

5)Groovy(Java)、Scala、JavaScript

これらの言語をGeoScriptで使用できます。例を参照してください

6) JEQLクエリ言語

Martin Davisが示すように(jeqlのラベル

shapefileReader t file: "agder/agder_buffer.shp";
t = select geomUnionMem(GEOMETRY) g from t;
ShapefileWriter t file: "result.shp";

6

コンピューターのない古い学校のGIS。lang-none

    Overlay acetate on paper maps, buffer with rulers,
    symbolize with dry-erase markers.
    No computers, so no language needed.

3

C#は、ArcGISのプログラミングに使用できます。ArcObjectsでは、これには多くのCOM相互運用性の処理が含まれるため、そこでの知識があれば非常に役立ちます。

C#は、ArcGIS for WPFおよびArcGIS for Silverlight SDKでも(多くの相互運用性を処理せずに)使用できます。

public static IPolyline MakePolyline(IPoint p1, IPoint p2)
{
    var polyline = new PolylineClass() as IPolyline;
    ((IZAware)polyline).ZAware = true;
    ((IMAware)polyline).MAware = true;
    polyline.SpatialReference = p1.SpatialReference;
    ((IPointCollection)polyline).AddPoint(p1);
    ((IPointCollection)polyline).AddPoint(p2);
    return polyline;
}

3

多くのWebGIS開発はJavaScriptを介して行われます。OpenLayersを使用したサンプルコードを以下に示します。

        var lon = 5;
        var lat = 40;
        var zoom = 5;
        var map, layer;

        function init(){
            map = new OpenLayers.Map( 'map' );
            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
            map.addLayer(layer);

            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
            map.addControl( new OpenLayers.Control.LayerSwitcher() );
        }

3

ArcGIS 10.0以降では、arcpyモジュールを介してPythonを使用します。

ArcGISに付属するPythonの使用:

import arcpy

# Make dictionary of lookup table
dictCityProvince = {}
rows = arcpy.SearchCursor(r"C:\temp\test.gdb\CityProvinceLookup")
for row in rows:
    dictCityProvince[row.CITY] = row.PROVINCE
del row,rows

これで問題が解決した場合は、問題ありません。


1

Androidプラットフォームの開発はJavaを使用して行われます。

OsmDroidプロジェクトのコードを以下に示します。

/**
 * Logs all Location-changes to <code>mRouteRecorder</code>.
 *
 * @author plusminus
 */
private class SampleLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(final Location loc) {
        if (loc != null) {
            if (SampleMapActivity.this.mDoGPSRecordingAndContributing)
                SampleMapActivity.this.mRouteRecorder.add(loc,
                        SampleMapActivity.this.mNumSatellites);

            SampleMapActivity.this.onLocationChanged(loc);
        } else {
            SampleMapActivity.this.onLocationLost();
        }
    }

1

多くのプロジェクトがC ++で開発されています。

QGisからのいくつかのソースコードは次のとおりです。

/**
  Open the specified project file; prompt to save previous project if necessary.
  Used to process a commandline argument or OpenDocument AppleEvent.
  */
void QgisApp::openProject( const QString & fileName )
{
  // possibly save any pending work before opening a different project
  if ( saveDirty() )
  {
    // error handling and reporting is in addProject() function
    addProject( fileName );
  }
  return ;
}

0

Cは、ArcSDE C APIで使用できます

こちらで10.1用にダウンロードできるようです、ヘルプページのAPIリストには記載されていません。10.1のオンラインヘルプが表示されず、10.0のヘルプしか表示されません。

void check_rc_(SE_CONNECTION Connection, SE_STREAM Stream, LONG rc, 
                 char *comment, LONG line_no, char* file_name) ;
static LONG S_create_layer (SE_CONNECTION connection, CHAR *table,CHAR *keyword,LONG precision);
static LONG S_point_cases(SE_CONNECTION connection,const CHAR* table);
static LONG S_line_cases(SE_CONNECTION connection,const CHAR* table);
static LONG S_polygon_cases(SE_CONNECTION connection,const CHAR* table);

LONG  main(int argc, char *argv[]){
    CHAR            *server, 
                    *user, 
                    *passwd, 
                    *database,
                    *instance,
                    *rslt_layer_name;
    SE_CONNECTION   conn;
    SE_ERROR        error;
    LONG            result;
    BOOL            all_step_passed=TRUE;

    if(argc<7){
        printf("usage: %s <server> <instance> <database> <user> <passwd> <result_layer>",argv[0]);
        exit(1);
    }

    server=argv[1];
    instance=argv[2];
    database=argv[3];
    user=argv[4];
    passwd=argv[5];
    rslt_layer_name=argv[6];

    printf("\nConnecting to SDE server %s:%s as %s\n",server,instance,user);
    result = SE_connection_create( server, instance, database, user, passwd, &error, &conn );
    check_rc_return_on_failure(conn,NULL,result,"SE_connection_create");
    printf("\t---Connected");

    /*Create a layer to store results*/
    printf("\n\nCreating a layer to store results......\n");
    result=S_create_layer (conn,rslt_layer_name,"DEFAULTS",64);
    if(result!=SE_SUCCESS)
        return result;
    else
        printf("\tLayer %s created.\n",rslt_layer_name);

    /*point shapes*/
    printf("\n\n***************************************************************************\n");
    printf("* Generating buffer for point shapes......                                *\n");
    printf("***************************************************************************\n");
    result=S_point_cases(conn,rslt_layer_name);
    if(result!=SE_SUCCESS)
        return result;

    /* line shapes */
    printf("\n\n***************************************************************************\n");
    printf("* Generating buffer for line shapes......                                 *\n");
    printf("***************************************************************************\n");
    result=S_line_cases(conn,rslt_layer_name);
    if(result!=SE_SUCCESS)
        return result;

    /* polygon shapes */
    printf("\n\n***************************************************************************\n");
    printf("* Generating buffer for polygon shapes......                              *\n");
    printf("***************************************************************************\n");
    result=S_polygon_cases(conn,rslt_layer_name);
    if(result!=SE_SUCCESS)
        return result;

    SE_connection_free(conn);

}

0

Visual Basic

Sub SelectByBufferedLine()
    Dim xy As String
    xy = InputBox("Enter x,y coordinates for line in metres. x1,y1 x2,y2 ...xn,yn e.g. 200000,200000 250000,200000 280000,250000", "Select by buffered line (keyboard input)")
    If (xy = "") Then Exit Sub
    xy = Replace(xy, " ", ",")
    xy = Replace(xy, ",,", ",")
    Dim arr As Object
    arr = Split(xy, ",")
    Dim numvals As Integer, n As Object
    numvals = (UBound(arr, 1) - LBound(arr, 1)) + 1
    If (numvals < 4) Or ((numvals Mod 2) <> 0) Then Exit Sub
    For Each n In arr
        If (Not IsNumeric(n)) Then Exit Sub
    Next
    '
    ' Create polyline from array of x,y's
    '
    Dim pt As IPoint
    pt = New Geometry.Point
    Dim pGeometry As IGeometry
    pGeometry = New Polyline
    Dim thePointCollection As IPointCollection
    thePointCollection = pGeometry
    Dim i As Long
    For i = LBound(arr, 1) To UBound(arr, 1) - 1 Step 2
        pt.PutCoords(arr(i), arr(i + 1))
        thePointCollection.AddPoint(pt)
    Next
    '
    ' Buffer the line
    '
    Dim topoOP As ITopologicalOperator
    Dim theBufferPoly As IPolygon
    topoOP = pGeometry
    topoOP.Simplify()
    Dim bufdist As String
    bufdist = InputBox("Enter buffer distance(m)", "Select by buffered line", 0)
    If (Not IsNumeric(bufdist)) Then Exit Sub
    theBufferPoly = topoOP.Buffer(bufdist)
    pGeometry = theBufferPoly
    '
    ' Query the Active Layer
    '
    Call SpatialQuery(My.ArcMap.Application, pGeometry)
    '
    ' Set Visible Extent
    '
    Dim pDoc As IMxDocument = My.ArcMap.Document
    Dim theExtent As IEnvelope
    theExtent = pGeometry.Envelope
    theExtent.Expand(2, 2, True)
    pDoc.ActiveView.Extent = theExtent
    pDoc.ActiveView.Refresh()
End Sub
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.