আর ব্যবহার করে কোনও ইএসআরআই ফাইল জিওডাটাবেস (.gdb) থেকে একটি সারণী পড়ুন


21

আমি ইএসআরআই ফাইল জিওডাটাবেস থেকে আর তে সরাসরি টেবিল পড়ার চেষ্টা করছি। উদাহরণস্বরূপ ডেটা ফাইলটি এখানে ডাউনলোড করা যায় । ডাটাবেসে একটি পয়েন্ট বৈশিষ্ট্য শ্রেণি (জোন 9_2014_01_ ব্রডকাস্ট) এবং দুটি লিঙ্কযুক্ত সারণী (জোন 9_2014_01_ভ্যাসেল এবং জোন 9_2014_01_ ভ্রমণ) রয়েছে) আপনি দ shapefile ব্যবহার পড়তে পারেন readOGRথেকে rgeosপ্যাকেজ:

library(rgeos)
library(downloader)

download("https://coast.noaa.gov/htdata/CMSP/AISDataHandler/2014/01/Zone9_2014_01.zip", dest="Zone9_2014_01.zip", mode="wb")
unzip("Zone9_2014_01.zip", exdir = ".")

#  Not Run (loads large point file)
#  broadcast <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Broadcast")

দুটি লিঙ্কযুক্ত সারণী আপনি কখন ব্যবহার করবেন ogrListLayersবা ব্যবহার করবেন তাও দেখায় ogrInfo। তবে, ogrInfoএকটি সতর্কতা দেয়:

সতর্কতা বার্তা: ogrInfo এ ("জোন 9_2014_01.gdb", স্তর = "জোন 9_2014_01_Vessel"): ogrInfo: সমস্ত বৈশিষ্ট্য নাল

এবং আপনি যদি readOGRটেবিলগুলিতে ব্যবহার করার চেষ্টা করেন তবে আপনি একটি ত্রুটি পান:

vessel <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel")

ওজিআর পড়ার ক্ষেত্রে ত্রুটি (ডিএসএন = "জোন 9_2014_01.gdb", স্তর = "জোন 9_2014_01_Vessel"): কোনও বৈশিষ্ট্য পাওয়া যায় নি সংযোজন সতর্কতা বার্তা: ogrInfo এ (ডিএসএন = ডিএসএন, স্তর = স্তর, এনকোডিং = ইউজ_আইকনভি = ব্যবহার_ আইকন, ও: আইআরএনও) সমস্ত বৈশিষ্ট্য নাল

সুতরাং, এটি প্রদর্শিত হয় যে কেবল ভৌগলিক বৈশিষ্ট্যগুলি পঠন-জিআর দ্বারা পড়া যায়। টেবিলগুলি সরাসরি আর-তে আমদানি করার কোনও উপায় আছে বা এই উত্তর হিসাবে যেমন আর্কজিআইএস থেকে * .dbf (বা * .txt) ফাইল হিসাবে রফতানি করার একমাত্র সমাধান ?

সংযোজন হিসাবে, যদি কেউ আর সি থেকে একটি সিগনি স্ক্রিপ্টে কল সরবরাহ করতে পারে যা * সিএসভি (পছন্দনীয়) বা * .ডিবিএফ ফাইলের রফতানি স্বয়ংক্রিয় করে দেয় তবে এটি গ্রহণযোগ্য কাজ হবে। সমাধানটি কেবল স্কেলযোগ্য এবং স্বয়ংক্রিয় হওয়া দরকার।


2
আপনি আর আর আর্কজিআইএস এর নতুন সংহতকরণ দেখেছেন? r-arcgis.github.io আপনার কাজের জন্য কিছু কার্যকর হতে পারে।
অ্যালেক্স তেরেশেনকভ

পরামর্শের জন্য ধন্যবাদ ... আমি এক পর্যায়ে এর উল্লেখ দেখেছি, তবে এর আগে কখনও এটিকে আরও ভাল করে দেখিনি। সম্ভবত এখন এটি করতে একটি ভাল সময় হবে!
সুতি.রকউড

@ অ্যালেক্সট্রেশেনকভ, যদি আপনি এই সমাধানের জন্য একটি সংক্ষিপ্ত উত্তর লিখতে চান তবে আমি এটি গ্রহণ করব, কারণ এটিই আমি খুঁজছিলাম।
সুতি.রকউড

1
এটি দেখে মনে হচ্ছে যে আর-আর্কজিআইএস ব্রিজটি @ অ্যালেক্সট্রেসেনকভের উল্লেখ করেছেন যে সরাসরি টেবিলগুলি আরতে পড়তে কার্যকারিতা রয়েছে The সংহতকরণের জন্য আর্কজিআইএস ডেস্কটপ> 10.3.1 (বা আর্কজিআইএস প্রো) এবং আর> 3.2 প্রয়োজন। -৪-বিট আর কেবলমাত্র -৪-বিট ব্যাকগ্রাউন্ড জিওপ্রোসেসিংয়ের সাথে ব্যবহার করা যেতে পারে (এবং কেবল আরকজিআইএস থেকে ব্যবহারের অনুমতি দেয়, আর থেকে নয়) বা আরকজিআইএস প্রো। বাইন্ডিংগুলি ইনস্টল হয়ে গেলে আপনি প্যাকেজটি arcgisbbindingআরটিতে ব্যবহার করতে পারেন The ফাংশনটি arc.open()টেবিলটি একটি হিসাবে খুলবে arc.dataset-class object। সরাসরি হিসাবে খোলার জন্য data.table, ফাংশনটি ব্যবহার করুন arc.select
সুতি.রকউড

জানা ভাল. আমি কেবল থ্রেডটি বন্ধ করার জন্য একটি উত্তর যুক্ত করেছি, তবে আপনি নিজেরাই সবকিছু আবিষ্কার করেছেন, তাই গ্রহণ করুন তবে
উজ্জীবিত হবেন

উত্তর:


18

আমি একটু পার্টি দেরী বিট, কিন্তু এই এখন দ্বারা পড়া যায় sfসঙ্গে,

vessel <- sf::st_read(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel")

এটি একটি সতর্কতা ফেরত দেয় (কোনও বৈশিষ্ট্য জ্যামিতি উপস্থিত নেই) তবে টেবিলের সাথে একটি ডেটা ফ্রেমও দেয়। এখানে শুরু হওয়া থ্রেডটি দেখুন: https://stat.ethz.ch/pipermail/r-sig-geo/2018- ফেব্রুয়ারি/026344. html


চমৎকার! ধন্যবাদ এডজার ... এসএফ এবং এর বিবর্তন দেখে আনন্দিত !!
সুতি.রকউড

আশ্চর্যজনক, আমি এটি 3 টি মেশিনে চালাতে সক্ষম হইনি: আমি একটি ত্রুটি পেয়েছি, সতর্কতা নয়?
মাতিফু

1
আপনাকে উত্স থেকে
গিথুব

আগের চেয়ে পার্টিতে দেরি করা ভাল! আমি 2 বছর আগে এই পার্টিতে এসেছি এবং পূর্ববর্তী সমাধানগুলির একটি প্রয়োগ করেছি implementation আমি কেবল একটি sfসমাধান অনুসন্ধান করতে গিয়েছিলাম এবং গুগল আনন্দের সাথে একটি দুর্দান্ত সহায়ক সমাধানের সাথে আমাকে এই একই পার্টিতে ফিরিয়ে এনেছে (তাই আমি আনন্দের সাথে এই প্রশ্নের সাথে আমার উত্স যোগ করেছি)।
ডি উডস

9

আমি জিডিএল ২.০.২ ব্যবহার করি যা এফডিজিবি সমর্থন সহ "শিপড" এবং তৃতীয় পক্ষ ছাড়া কোনও স্টাফ তদন্ত করার জন্য কোনও এফজিডিবি ড্রাইভার নেই । পরীক্ষার পরিবেশটি হ'ল ডেবিয়ান জেসি 64৪-বিট।

সংক্ষেপে, মনে হয়, "স্তর" Zone9_2014_01_Vesselখাঁটি বৈশিষ্ট্যযুক্ত ডেটা এবং স্তরটিতে Zone9_2014_01_Broadcastঅবস্থানের ডেটা রয়েছে। আপনি সিস্টেম কল এবং জিডিবির কথোপকথনটির মাধ্যমে একটি শেপফিলের ধারক (উত্তরের শেষ স্ক্রিপ্ট) এর মাধ্যমে আর এর মধ্যে একটি কার্যকারিতা ব্যবহার করতে পারেন।

এখানে তদন্তের পদক্ষেপগুলি রয়েছে:

$ mkdir ~/dev.d/gis-se.d/gdb 
$ cd ~/dev.d/gis-se.d/gdb
$ wget https://coast.noaa.gov/htdata/CMSP/AISDataHandler/2014/01/Zone9_2014_01.zip
$ unzip Zone9_2014_01.zip
$ ogrinfo Zone9_2014_01.gdb Zone9_2014_01_Vessel | head -20
Had to open data source read-only.
INFO: Open of `Zone9_2014_01.gdb'
      using driver `OpenFileGDB' successful.

Layer name: Zone9_2014_01_Vessel
Geometry: None <---------------------------- HERE 
Feature Count: 1282
Layer SRS WKT:
(unknown)
FID Column = OID
MMSI: Integer (0.0)
IMO: Integer (0.0)
CallSign: String (255.0)
Name: String (255.0)
VesselType: Integer (0.0)
Length: Integer (0.0)
Width: Integer (0.0)
DimensionComponents: String (255.0)
OGRFeature(Zone9_2014_01_Vessel):1
  MMSI (Integer) = 367603345

আপনি দেখতে ফিল্ড Geometryসেট করা আছে None। আপনি ব্যবহার করে ogr2ogrডেটাটিকে কোনও আকার ফাইলে রূপান্তর করতে পারেন এবং কেবল একটি dbase বৈশিষ্ট্য ফাইলও পেতে পারেন:

$ ogr2ogr -f 'ESRI SHAPEFILE' test Zone9_2014_01.gdb Zone9_2014_01_Vessel
$ ls test

Zone9_2014_01_Vessel.dbf

জ্যামিতি (অবস্থান) লেয়ার খুঁজে পাওয়া যেতে পারে Zone9_2014_01_Broadcast

$ ogr2ogr -f 'ESRI SHAPEFILE' test Zone9_2014_01.gdb
$ ls test

Zone9_2014_01_Broadcast.dbf  
Zone9_2014_01_Broadcast.shp  
Zone9_2014_01_Broadcast.prj  
Zone9_2014_01_Broadcast.shx  
Zone9_2014_01_Vessel.dbf
Zone9_2014_01_Voyage.dbf

বদনা এবং ভয়েজ অনুযায়ী কোন অবস্থানে তথ্য ধারণকারী এআইএস বার্তা প্রোটোকল

জিডিবি-কে কথোপকথনটি শেফ foreignকরতে এবং ডিবিএফ-এর পড়ার জন্য প্যাকেজটির জন্য একটি সিস্টেম কল ব্যবহার করে এখানে আর-এর সম্পূর্ণ কাজটি শুরু হয়েছে:

# Load module to get readOGR
require('rgdal');

# Load module to get read.dbf
require('foreign');

# goto the directory with the GDB stuff
setwd('~/dev.d/gis-se.d/gdb')

# Conversation to a shapefile container 
system("ogr2ogr -f 'ESRI SHAPEFILE' test Zone9_2014_01.gdb") 

# read the vessels
vessel <- read.dbf('test/Zone9_2014_01_Vessel.dbf');

# read hte voyage data
voyage <- read.dbf('test/Zone9_2014_01_Voyage.dbf');

# read the geometries in broad cast
broadcast <- readOGR('test/Zone9_2014_01_Broadcast.shp','Zone9_2014_01_Broadcast')

OGR data source with driver: ESRI Shapefile
Source: "test/Zone9_2014_01_Broadcast.shp", layer: "Zone9_2014_01_Broadcast"
with 1639274 features
It has 10 fields

# is vessel OK?    
head(vessel)

MMSI IMO CallSign Name VesselType Length Width   DimensionC
1 367603345  NA     <NA> <NA>         50     20     6     7,13,3,3
2 563000574  NA     <NA> <NA>         70    276    40 188,88,20,20
3 367449580  NA     <NA> <NA>         31     28    10     9,19,5,5
4 367302503  NA     <NA> <NA>         31     20     8     8,12,4,4
5 304003909  NA     <NA> <NA>         71    222    32 174,48,21,11
6 210080027  NA     <NA> <NA>         71    294    32 222,72,22,10

# is voyage OK?
head(voyage)

VoyageID           Destinatio Cargo Draught        ETA  StartTime    EndTime      MMSI
1       12                 KAKE    50      20       <NA> 2014-01-01       <NA> 367603345
2       23             YOKOHAMA    70     125 2014-01-11 2014-01-01 2014-01-30 563000574
3       38         KETCHIKAN AK    31      40 2014-11-12 2014-01-01       <NA> 367449580
4       52 CLARENCE STRAIT LOGS    31      30 2014-09-12 2014-01-01       <NA> 367302503
5       62               JP TYO    71      90 2014-01-13 2014-01-01 2014-01-31 304003909
6       47           VOSTOCHNYY    71     106 2014-01-13 2014-01-01       <NA> 210080027

ধন্যবাদ @ হাকফিন! এটি একটি সুন্দর কাজ। আমার কাছে বেশ কয়েকটি ফাইল রয়েছে (যার মধ্যে অনেকগুলি উদাহরণের চেয়ে অনেক বড়) তাই আমি এটিকে একটি শট দেব এবং দেখি কীভাবে কোনও শেফফাইলে রূপান্তর প্রক্রিয়াজাতকরণের সময়গুলিকে প্রভাবিত করে। আমিও আশাবাদী, আর এর মধ্যে প্রত্যক্ষ সমাধান রয়েছে, তবে যদি কেউ উত্তর না দেয় তবে আমি উত্তর হিসাবে আপনাকে নির্বাচন করব।
সুতি.রকউড

3

আপনি রিডওজিআর দিয়ে এটি করতে পারেন কিনা তা নিশ্চিত নন তবে চেষ্টা করুন

vessel <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel", dropNULLGeometries = FALSE)

যদি এটি কাজ না করে তবে ogr2ogrসরাসরি চেষ্টা করুন , যা টেবিলে অ-জ্যামিতিগুলি রফতানি করতে পারে। ( gdalUtilsএটি একবার চালানোর জন্য আর প্যাকেজটি চেষ্টা করে দেখুন your )


1
দুর্ভাগ্যক্রমে, readOGRজিডিবি টেবিলগুলি পড়ার ক্ষমতা নেই।
হারুন

1
এটা সম্ভবত এখন, না।
এমডসুমনার

এখনও rgdal 1.2-8 হিসাবে নেই, gdal 2.0.1
গ্রেগম্যাকফার্লেন

এটিকে ওগ্রিড্রাইভারস () নাম হিসাবে ওপেনফিলজিডিবি বলা হয়, সম্ভবত আপনি কোনও রাস্টার পড়ার চেষ্টা করছেন? এটি এখনও কার্যকর করা হচ্ছে, আপনি যদি জানতে চান যে আপনি আপনার সিস্টেম এবং আপনি কী চেষ্টা করেছেন সে সম্পর্কে বিশদ সহ একটি প্রশ্ন পোস্ট করতে পারেন।
mdsumner

3

সেখানে R ও Esri থেকে ArcGIS বলা মধ্যে একটি সম্প্রতি মুক্তি ইন্টিগ্রেশন হল আর ArcGIS সরঞ্জাম । এটি আর এবং আর্কজিআইএসের মধ্যে সংহতকরণ সরবরাহ করে যাতে একে অন্যের পরিবর্তে আর সরঞ্জাম এবং আর্কজিআইএস সংস্থানসমূহ অ্যাক্সেস করা সম্ভব করে। আপনার এই সংহতকরণের সাথে জিওডাটাবেস বৈশিষ্ট্য শ্রেণি / সারণীগুলি অ্যাক্সেস করতে সক্ষম হওয়া উচিত।

নমুনা আর টুলস পাওয়া যায় এখানে এবং স্ক্রিপ্ট geoprocessing মধ্যে R ব্যবহার ব্যাখ্যা নমুনা সরঞ্জাম এখানে


1

এই কাস্টম ফাংশনটি মূলত @huckfinn দ্বারা বর্ণিত পথ অনুসরণ করে তবে gdalUtils@ mdsumner দ্বারা প্রস্তাবিত লাইব্রেরিটি ব্যবহার করে ।

read_GDB_Layer <- function(dsn, layerName, overwrite = T) {
   conversionDir <- tempdir()

   gdalUtils::ogr2ogr(src_datasource_name = dsn, 
                      dst_datasource_name = conversionDir, 
                      f = "ESRI Shapefile", layer = layerName, 
                      verbose = T, overwrite = overwrite)

   df <- foreign::read.dbf(file.path(conversionDir, paste0(layerName, ".dbf")))

   return(df)
}

এটি এইভাবে চালান:

vsl <- read_GDB_Layer(dsn = "Zone9_2014_01.gdb", layerName = "Zone9_2014_01_Vessel")
vyg <- read_GDB_Layer(dsn = "Zone9_2014_01.gdb", layerName = "Zone9_2014_01_Voyage")

আপনি যদি ইতিমধ্যে gdalইনস্টল না করে থাকেন তবে অ্যাক্সেস সরবরাহ করতে আপনাকে এটি ইনস্টল করতে হবে gdalUtils। আপনি এখানে 'gdal' ইনস্টলেশন জন্য বাইনারি এবং নির্দেশাবলী পেতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.