SpatiaLite

feanor의 이미지

SpatiaLite는 SQLite에 GIS 지리 정보 데이터베이스에 필요한 기능을 추가해 주는 확장입니다.

데비안에는 spatialite-bin 패키지로 있습니다.

테스트할 자료가 필요해서 구글에서 "행정구역도"로 검색하니 서울시정개발연구원 도면자료 페이지가 나왔습니다. "남한 행정구역도"에서 "시군구경계 SHP" zip 파일을 받았습니다.

SHP란 Shapefile이라는 벡터 자료 포맷입니다. ESRI(한국ESRI)라는 회사에서 만들어서 널리 쓰입니다. 특이하게도 지리 정보가 아닌 정보를 저장하기 위해서는 DBase .dbf를 사용합니다.

$ unzip shp_southKorea_admin.zip
$ spatialite
spatialite> .loadshp final_sigungu sigungu cp949
load shapefile error: cannot open shapefile 'final_sigungu'
	cause: 'final_sigungu.dbf' contains unsupported data types

SpatiaLite에는 SQLite의 메타 명령들에 Shapefile을 다루기 위한 .loadshp와 .dumpshp라는 명령이 추가되어 있습니다. 첫 번째 인자로는 Shapefile 이름을 확장자 없이 입력하고, 두 번째 인자로는 SQLite 테이블명 (새로 만들어집니다), 세 번째 인자로는 문자 인코딩을 넘겨줍니다.

그런데 현재 데비안에 패키징되어 있는 2.3.0 버전에는 .dbf의 F 타입(부동소수점 값)에 대한 지원이 없어서 위와 같이 에러가 납니다. 2.3.1 버전을 소스 빌드해 보니 이 문제는 해결이 되어 있었습니다.

소스 빌드를 하지 않으려면 DBase 파일 포맷을 읽고 쓸 수 있는 다른 도구로 .dbf에서 F 타입 필드를 제거하면 됩니다. 저는 파이썬의 dbfpy 모듈을 사용해서 도구를 만들었습니다. (첨부합니다.)

$ python filter.py final_sigungu.dbf new.dbf
$ mv new.dbf final_sigungu.dbf

이제 .loadshp 명령을 다시 실행하면,

========
Loading shapefile at 'final_sigungu' into SQLite table 'sigungu'
 
BEGIN;
CREATE TABLE sigungu (
PK_UID INTEGER PRIMARY KEY AUTOINCREMENT,
OBJECTID INTEGER,
GUNAME TEXT,
Geometry BLOB);
COMMIT;
 
Inserted 232 rows into 'sigungu' from SHAPEFILE
========

쿼리를 해보겠습니다. 면적이 가장 큰 행정구역 5개를 찾아봅시다. (2003년 자료라 현재와는 맞지 않습니다.)

spatialite> select guname, area(geometry) as a from sigungu order by a desc limit 5;
원주시|1806377726.48088
고성군|1653906495.90943
봉화군|1524785151.67461
정선군|1455213815.82865
의성군|1333574637.60126

다른 여러 함수는 SpatiaLite tutorial에 잘 설명되어 있습니다.

File attachments: 
첨부파일 크기
Plain text icon filter.py_.txt650바이트

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.