ホーム » GIS

GIS」カテゴリーアーカイブ

iOSのMKMapViewでタイル表示

iOSのMKMapViewでApple Mapではなく他のタイルサーバー(OSM)を使用するにはMKMapViewのオーバーレイ機能を使用する。

[code]
MKMapView *mv = [[[MKMapView alloc]initWithFrame:rect]autorelease];
[mv setMapType:MKMapTypeStandard];
[mv setDelegate:self];

NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template];
overlay.canReplaceMapContent = YES;
[mv addOverlay:overlay level:MKOverlayLevelAboveLabels];
[/code]

[code]
– (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
if ([overlay isKindOfClass:[MKTileOverlay class]]) {
return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
return nil;
}
[/code]

GIS小ネタ

GeoTiff to 16 bit tiff, png or bmp image for heightmap

QGIS 選択したFeatureを新規レイヤーに貼り付け

TOOLバーの「領域またはシングルクリックによるチ物選択」ボタンを選択し対象のFeatureを選択

編集メニューのチ物のコピーを選択

編集メニューの新規レイヤへの地物貼り付けを選択

レイヤ名を入力してレイヤを作成

今更ながらの小地域

e-Statでダウンロード可能な最小の地域である小地域とは基本的には町丁目または大字字である。

西池袋3丁目の場合は「西池袋」が「町」、「3丁目」が「丁目」である。

大字と字は見つけたら記載の予定

今更ながらのe-statから小地域データのダウンロード

統計局のe-Statから小地域(町丁目、大字、字)のポリゴンと国勢調査の結果などがダウンロードできる。
久しぶりにサイトに来るとダウンロードの方法が分からなくなるので記載。

s-Statを開き、「地図や図表で見る」→「地図で見る統計(統計GIS)」を選択。

「データダウンロード」を選択

国勢調査(小地域)を選択し、統計表より対象項目を選択

対象都道府県、市区町村を選択して「検索」ボタンを実行し、ダウンロードサイトが表示される。

座標を可視化

ポリゴンを表す緯度、経度のCSVファイルを空間データとして可視化するには、
WellknownText形式に変換してQGISで開くのがとっても簡単!

緯度、経度のCSVを
[code]
34.2225148615066,135.164278680816
34.2222647892155,135.164253691228
34.2209399347514,135.164065751247
34.2208400011058,135.166490542546
省略
34.2190481285219,135.163178891017
34.219082076719,135.161066074617
34.2202399699249,135.162128943605
34.220981886875,135.162165915966
34.2225148615066,135.164278680816
[/code]

以下のフォーマットに変換
[code]
POLYGON((135.164278680816 34.2225148615066,135.164253691228 34.2222647892155,135.164065751247 34.2209399347514,135.166490542546 34.2208400011058,135.167490488286 34.2198321377673,135.167478515946 34.2190232289557,135.166240626338 34.2189572083141,135.16444085933 34.2166574274783,135.164740868754 34.2155735568347,135.165003879174 34.2145576776619,135.163853988215 34.214298680841,135.162641134789 34.2130657927005,135.162741137292 34.2127238336321,135.162841140057 34.2123738754678,135.162904142211 34.2121409032373,135.162616135067 34.2131237855764,135.162354128904 34.2140076796957,135.163191050544 34.2141656808295,135.164365856843 34.2169323946867,135.163178891017 34.2190481285219,135.161066074617 34.219082076719,135.162128943605 34.2202399699249,135.162165915966 34.220981886875,135.164278680816 34.2225148615066))
[/code]

更に以下のCSVに変換
[code]
NAME,GEOM
店舗,"POLYGON((135.164278680816 34.2225148615066,135.164253691228 34.2222647892155,135.164065751247 34.2209399347514,135.166490542546 34.2208400011058,135.167490488286 34.2198321377673,135.167478515946 34.2190232289557,135.166240626338 34.2189572083141,135.16444085933 34.2166574274783,135.164740868754 34.2155735568347,135.165003879174 34.2145576776619,135.163853988215 34.214298680841,135.162641134789 34.2130657927005,135.162741137292 34.2127238336321,135.162841140057 34.2123738754678,135.162904142211 34.2121409032373,135.162616135067 34.2131237855764,135.162354128904 34.2140076796957,135.163191050544 34.2141656808295,135.164365856843 34.2169323946867,135.163178891017 34.2190481285219,135.161066074617 34.219082076719,135.162128943605 34.2202399699249,135.162165915966 34.220981886875,135.164278680816 34.2225148615066))"
[/code]

QGISを開き「レイヤ」-「レイヤの追加」-「デリミテッドテキストレイヤの追加」を選択し作成したCSVを開く

座標系を聞かれるので旧日本測地ならばEPSG:4301を選択、世界測地ならばEPSG:4326を選択

以上でQGIS上で確認

spatialiteにイメージをimport(gdal_transfer編)

rasterlite2にこてんぱにやられたので今回はgdal_transferを試す。

参考にしたのはgdal_translateのリファレンスとRasterlite – Rasters in SQLite DB

今回使用したGDAL関連のモジュールはQGISをインストールした際にC:\OSGeo4W\binにインストールしたファイル。

rasterlite2編と同様に「空間データを使うために必要なテーブルを作成」までを実行。

各画像をインポート
[code]
C:\work\pasco>gdal_translate -of Rasterlite 2135.jpg RASTERLITE:work.sqlite,table=source -co DRIVER=JPEG
Input file size is 5000, 3750
0…10…20…30…40…50…60…70…80…90…100 – done.
C:\work\pasco>gdal_translate -of Rasterlite 2136.jpg RASTERLITE:work.sqlite,table=source -co DRIVER=JPEG
Input file size is 5000, 3750
0…10…20…30…40…50…60…70…80…90…100 – done.
C:\work\pasco>gdal_translate -of Rasterlite 2137.jpg RASTERLITE:work.sqlite,table=source -co DRIVER=JPEG
Input file size is 5000, 3750
0…10…20…30…40…50…60…70…80…90…100 – done.
[/code]

Creating internal overviews
[code]
C:\work\pasco>gdaladdo RASTERLITE:work.sqlite,table=source 2 4 8 16
0…10…20…30…40…50…60…70…80…90…100 – done.
0…10…20…30…40…50…60…70…80…90…100 – done.
0…10…20…30…40…50…60…70…80…90…100 – done.
0…10…20…30…40…50…60…70…80…90…100 – done.
[/code]
Creating internal overviewsは以下のほうがよさそうなので改めてGDAL1.10以上バージョンを実行
Creating internal overviews with options (GDAL 1.10 or later):
[code]
C:\work\pasco>gdaladdo RASTERLITE:work.sqlite,table=source 2 4 8 16 –config RASTERLITE_OVR_OPTIONS DRIVER=JPEG,COMPRESS
=JPEG,PHOTOMETRIC=YCbCr
Warning 6: Unexpected option ‘COMPRESS’ for driver ‘JPEG’
Warning 6: Unexpected option ‘PHOTOMETRIC’ for driver ‘JPEG’
0…10…20…30…40…50…60…70…80…90…100 – done.
Warning 6: Unexpected option ‘COMPRESS’ for driver ‘JPEG’
Warning 6: Unexpected option ‘PHOTOMETRIC’ for driver ‘JPEG’
0…10…20…30…40…50…60…70…80…90…100 – done.
Warning 6: Unexpected option ‘COMPRESS’ for driver ‘JPEG’
Warning 6: Unexpected option ‘PHOTOMETRIC’ for driver ‘JPEG’
0…10…20…30…40…50…60…70…80…90…100 – done.
Warning 6: Unexpected option ‘COMPRESS’ for driver ‘JPEG’
Warning 6: Unexpected option ‘PHOTOMETRIC’ for driver ‘JPEG’
0…10…20…30…40…50…60…70…80…90…100 – done.
Creating internal overviews with options (GDAL 1.10 or later):
[/code]

Cleaning internal overviews :
[code]
C:\work\pasco>gdaladdo -clean RASTERLITE:work.sqlite,table=source
[/code]

Creating external overviews in a .ovr file:
[code]
C:\work\pasco>gdaladdo -ro RASTERLITE:work.sqlite,table=source 2 4 8 16
ERROR 6: Cannot add external overviews to a dataset with internal overviews
Overview building failed.
[/code]

「Creating external overviews in a .ovr file:」はエラーが発生したが、QGISで閲覧すると十分なスピードが確保できた。

以上

spatialiteにイメージをimport(rasterlite2 その2 結局失敗編)

前回は「rl2tool CREATE」でエラーが発生した今回はエラーが発生しないようにテーブル「strict_resolution」のNOT NULL制約の付いている項目にdefault 0を設定。
[code]
CREATE TABLE raster_coverages (
coverage_name TEXT NOT NULL PRIMARY KEY,
title TEXT NOT NULL DEFAULT ‘*** missing Title ***’,
abstract TEXT NOT NULL DEFAULT ‘*** missing Abstract ***’,
sample_type TEXT NOT NULL DEFAULT ‘*** undefined ***’,
pixel_type TEXT NOT NULL DEFAULT ‘*** undefined ***’,
num_bands INTEGER NOT NULL DEFAULT 1,
compression TEXT NOT NULL DEFAULT ‘NONE’,
quality INTEGER NOT NULL DEFAULT 100,
tile_width INTEGER NOT NULL DEFAULT 512,
tile_height INTEGER NOT NULL DEFAULT 512,
horz_resolution DOUBLE NOT NULL,
vert_resolution DOUBLE NOT NULL,
srid INTEGER NOT NULL,
nodata_pixel BLOB NOT NULL,
palette BLOB,
statistics BLOB,
geo_minx DOUBLE,
geo_miny DOUBLE,
geo_maxx DOUBLE,
geo_maxy DOUBLE,
extent_minx DOUBLE,
extent_miny DOUBLE,
extent_maxx DOUBLE,
extent_maxy DOUBLE,
strict_resolution INTEGER NOT NULL DEFAULT 0,
mixed_resolutions INTEGER NOT NULL DEFAULT 0,
section_paths INTEGER NOT NULL DEFAULT 0,
section_md5 INTEGER NOT NULL DEFAULT 0,
section_summary INTEGER NOT NULL DEFAULT 0,
is_queryable INTEGER,
red_band_index INTEGER,
green_band_index INTEGER,
blue_band_index INTEGER,
nir_band_index INTEGER,
enable_auto_ndvi INTEGER,
CONSTRAINT fk_rc_srs FOREIGN KEY (srid) REFERENCES spatial_ref_sys (srid))
[/code]

今度はrl2too.を使わずに「Tutorial: building and testing the Planet Earth sample – full SQL」
に従ってインポート。

「空間データを使うために必要なテーブルを作成」までは前回で終了している。

Coverage作成
[code]
sqlite> SELECT RL2_CreateCoverage(‘Test’, ‘UINT8’, ‘RGB’, 3, ‘JPEG’, 80, 512, 512, 2451, 0.0138888889);
1
sqlite> SELECT RL2_LoadRaster(‘Test’, ‘0108.jpg’);
Importing: 0108.jpg
——————
Image Size (pixels): 5000 x 3750
SRID: -1
LowerLeft Corner: X=-63999.92 Y=-36600.08
UpperRight Corner: X=-63199.92 Y=-36000.08
Pixel resolution: X=0.16 Y=0.16
INSERT INTO sections; sqlite3_step() error: Test_sections.geometry violates Geometry constraint [geom-type or SRI
llowed]
0
sqlite> SELECT RL2_LoadRaster(‘Test’, ‘0108.jpg’, 1, 2451);
Importing: 0108.jpg
——————
Image Size (pixels): 5000 x 3750
SRID: 2451
LowerLeft Corner: X=-63999.92 Y=-36600.08
UpperRight Corner: X=-63199.92 Y=-36000.08
Pixel resolution: X=0.16 Y=0.16
———-
Pyramid levels successfully built for: 0108
1
sqlite> select RL2_Pyramidize(‘test’);
1
sqlite> select RL2_SetCoverageInfos(‘test’,’test1′,’hello’);
1
sqlite> .quit
[/code]
とりあえずエラーが発生せずに終了

動作確認のためにwmsliteを実行してみると
[code]
wmslite -db test.sqlite

======================================================
WmsLite server startup
======================================================
SQLite version: 3.8.5
SpatiaLite version: 4.2.0
RasterLite2 version: 1.0.0-rc0
======================================================
the DB "test.sqlite" doesn’t contain any valid Raster Coverage
wmslite server shutdown in progress
wmslite shutdown completed … bye bye
[/code]

「doesn’t contain any valid Raster Coverage」失敗のようだ!

wmsliteのソースを追えば問題箇所が判明するかもしれないが、とりあえず一旦終了して次回はGDALのTOOLで試す。

Spatialiteの空間データテーブルをArcObjectsに表示

[code]
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesGDB.SqlWorkspaceFactoryClass();
ESRI.ArcGIS.Geodatabase.IFeatureWorkspace featureWorkspace = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)workspaceFactory1.OpenFromFile(@"Spatialiteフルパス", 0);
ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("テーブル名");
ESRI.ArcGIS.Carto.IFeatureLayer featureLayer = new ESRI.ArcGIS.Carto.FeatureLayerClass();
featureLayer.FeatureClass = featureClass;
featureLayer.Name = "レイヤ名";
axMapControl1.AddLayer(featureLayer);
[/code]

参考にしたサイトUsing Sqlite/Spatialite with ArcObjects and C#

GeoTIFFのExtentを表示

GeoTIFFのExtentはGDALのユーティリティgdalinfoで表示可能。
gdalinfoのサイト

Windows上で動作するコンパイル済みのGDALモジュールはOsgeoのwikiのダウンロードサイトにあるリンクからたどった
Gisinternalsよりダウンロード
d1

今回は1.9.2 vc2008 32bit版(release-1500-gdal-1-9-2-mapserver-6-2-0.zip)をダウンロード
d2

圧縮ファイル内のbinディレクトリにあるdllとbin\gdal\appsにあるgdalinfo.exeをドイツのディレクトリにおいてコマンドからGEOTIFFのパスを渡すとgeotiffのExtenを含めて各種の情報を表示

d3