"ESRI শেফিল" ড্রাইভার ব্যবহার করার সময় ফিল্ডের নামগুলি সংক্ষেপণ থেকে কীভাবে WritOGR কে থামানো যায়


18

আমি বর্তমানে একটি টেবিল থেকে প্রচুর পৃথক আকারের ফাইলে কিছু বৈশিষ্ট্যযুক্ত ডেটা যুক্ত করতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করছি:

library(rgdal)
specieslist <- read.csv("SpeciesList1.txt", header=F)
attdata <- read.table("TestAtt.csv", sep = ",", header=T)
for (n in 1:dim(specieslist)[1]) 
{
speciesname <- specieslist[n,1]
shp <- readOGR("Mesoamerica_modified_polygons", speciesname)
shp$ENGL_NAME<-attdata[n,2]
writeOGR(shp, "PolygonsV2", speciesname, driver="ESRI Shapefile")
}

আমি নীচে নিম্নলিখিত সতর্কতা পেয়েছি:

1: In writeOGR(shp, "PolygonsV2", speciesname, driver = "ESRI Shapefile") :
Field names abbreviated for ESRI Shapefile driver

এই প্রক্রিয়াটির পরে শেফফিলের বৈশিষ্ট্য সারণীটি দেখার সময়, ফিল্ডের নামটি 'ENGL_' এ সংক্ষিপ্ত করা হয়েছে, তবে আমি এটি 'ENGL_NAME' হিসাবে থাকতে চাই as এই সংক্ষেপটি বন্ধ করার কোনও উপায় আছে কি?

যে কোনও সহায়তা অনেক প্রশংসিত।


শেফফিল> ফিল্ডের কোনও নাম> 10 টি অক্ষর? আমার কাছে আর বাঁধার মধ্যে একটি বাগের মতো মনে হচ্ছে।
geographika

1
হাই, আমি কেবল স্ক্রিপ্টটি পুনরায় চালিত করেছি এবং এখন এটি সংক্ষেপে নয়। আমি নিশ্চিত না যদিও এর কারণ হিসাবে কী পরিবর্তন হয়েছে ...
জেপিডি

উত্তর:


9

আপনি পারবেন না, এটি একটি শেফফিল সমস্যা। 'তৈরি বিকল্পসমূহ' এর অধীনে http://gdal.org/drv_shapefile.html দেখুন


সুতরাং এটি একটি ইস্যু না writeOGR? এটি কি আসলে ফরম্যাটের ইস্যু?
টমাস

1
সঠিক। dbf কলাম নামের দৈর্ঘ্য সীমাবদ্ধ। অন্য একটি ফর্ম্যাট, উদাহরণস্বরূপ স্ক্লাইট / স্পেসিয়ালাইট নামগুলি কেটে ফেলবে না (স্ক্লাইটে খুব বড় সীমা রয়েছে, তবে 10 এর উপরে প্রস্থের অনেকগুলি অর্ডার)।

3
ঠিক আছে, ডিবিএফ-তে লেখার সময় কলামের নামগুলির সাধারণ সংক্ষিপ্তসার এবং সেখানে রাইটিং ওজিআর কী করছে তার মধ্যে পার্থক্য রয়েছে! WritOGR এমনকি ক্ষেত্রের নামগুলি 10 এর চেয়েও ছোট হয়ে যাচ্ছে My এমনকি আমার পরিবর্তনশীল "এলবিএলকালার" (8 টি অক্ষর!) "এলবিএলকলার" হয়ে যায়।
বারেন্ড ভি।

ডিবি / ডেটা স্ট্রাকচারে কি একই জাতীয় কলামের নাম রয়েছে? আমি ogr2ogr এবং এই নামের সাথে একটি স্ক্লাইট ডিবি প্রতিলিপি করতে পারি না। যদি আপনি কোনও নমুনা সরবরাহ করতে পারেন তবে আমি আরও তাকাতে পারি, অথবা সম্ভবত আর বাইন্ডিংগুলি সমস্যার কারণ হয়ে দাঁড়িয়েছে।

1
লিঙ্কটি মারা গেছে, তবে আমার 10 টি অক্ষরের চেয়েও বেশি দীর্ঘ ফিল্ডের নামগুলির সাথে শেফফিল রয়েছে; এটি যদি শেফফাইল সমস্যা হয় তবে কেন এটি সম্ভব?
ম্যাট

7

আপনার 'ENGL_NAME' কে মোটেও সংক্ষিপ্ত করা উচিত নয় (10 টিরও কম অক্ষরের), তবে WritOGR এর নিজস্ব ইচ্ছার রয়েছে বলে মনে হয়।

পরিবর্তে

writeOGR(shp, "PolygonsV2", speciesname, driver="ESRI Shapefile")

আপনি চেষ্টা করতে পারেন

library(maptools)
currdir <- getwd() #store your current working directory
setwd(paste(currdir,"PolygonsV2",sep="/")) #switch to your desired folder

writeSpatialShape(shp, speciesname) # write shapefile

setwd(currdir) #switch back to parent folder

যেমন লেখার স্পেশিয়াল শ্যাপের গন্তব্যের কোনও প্যারামিটার নেই, তাই আমি এই ডিরেক্টরিটি পিছনে পিছনে কর্মরত ডিরেক্টরিকে স্যুইচ করতে দেখলাম।

অন্য সমস্যাটি হ'ল এটি একটি .prj-file তৈরি করে না, তবে ধ্বংস ক্ষেত্রের নামের তুলনায় এটি একটি ছোট সমস্যা tha

সেই সময়ের জন্য অপেক্ষা করা যখন + * # -! (/ ESRI শেফিল ফর্ম্যাটটি শেষ অবধি মারা যায় এবং তার পরিবর্তে ... ভাল?


জিওপ্যাকেজ দ্বারা প্রতিস্থাপন?
জেস্টে

3

আরস্টুডিওতে কাজ করতে গিয়ে আমি একই রকম সমস্যায় পড়ছি। উপরের বিভিন্ন মন্তব্য এবং উত্তরের পরামর্শ অনুসারে, আমার জ্বলিত-পৃথিবী সমাধানটি হ'ল:

  • সেই স্থানে যেখানে স্পটিয়ালওয়াসহ ডেটাফ্রেম শেপে লিখিতভাবে প্রস্তুত থাকে, একটি অনুলিপি তৈরি করুন
  • names(copy@data) <- c('new', 'short', 'names', 'you', 'pickd', 'yrslf')
  • names(copy@data) <- strtrim(names(copy@data), 10) নিশ্চিত হবার জন্য
  • writeOGR(copy, dsn, layer, driver = 'ESRI Shapefile') তবে এটি চালাও না
  • স্ক্রিপ্টটি সংরক্ষণ করুন, লুকানো বস্তুগুলি সহ কর্মক্ষেত্র সাফ করুন, আর পুনরায় চালু করুন, পুরো স্ক্রিপ্টটি পুনরায় চালু করুন।

WritOGR () বেস :: সংক্ষেপে ব্যবহার করে - এখানে 158-164 লাইনের অনুলিপি সহ একটি পরীক্ষা করা হয়েছে:

fld_names <- c('short', 'longlonglong', 'middle_1')
if (any(nchar(fld_names) > 10)) {
    fld_names <- abbreviate(fld_names, minlength = 7)
    warning("Field names abbreviated for ESRI Shapefile driver")
    if (any(nchar(fld_names) > 10)) 
      fld_names <- abbreviate(fld_names, minlength = 5)
  }

> fld_names
       short longlonglong     middle_1 
     "short"    "lnglngl"    "middl_1" 
> names(fld_names)
[1] "short"        "longlonglong" "middle_1"  

আপনি দেখতে পাচ্ছেন এটি কলটি দুটি সংক্ষেপে সংক্ষিপ্ত আকারে রয়েছে (সম্ভবত অর্থহীনভাবে, আমি বুঝতে পারি না আপনি কীভাবে সেই উপ-লুপটি ট্রিগার করবেন), এবং এমনকি যদি একটি কলামের নাম> 10 তবে এটি কোনও কলামের নাম> 7 অক্ষরের সাথে সংক্ষিপ্ত করে দেবে। আমি যদি বুঝতে পারি না যে কারও কারও স্থানটি পরিষ্কার করতে হবে এবং পুনরায় আরম্ভ করতে হবে যদি লিখিত ওজিআর একই বস্তুটিতে আগে চালিত হয়েছিল তবে এটি সম্ভবত কিছু নামযুক্ত চরিত্রের ভেক্টর হিসাবে fld_names এর সাথে করার আছে। As.character () সংক্ষেপে () এর চারপাশে মোড়ানো থাকলে এটি আরও ভাল কাজ করতে পারে।


হেই ধন্যবাদ. আমি আমার PRJ ফাইলটি আলগা করতে চাইনি যাতে এই উত্তরটি পড়তে সহায়তা হয়েছিল। WritOGR কল করার আগে আমি আমার সমস্ত ক্ষেত্রের নাম 10 বা তার চেয়ে কম অক্ষর তৈরি করেছি এবং কোনওটির সংক্ষিপ্তসার 7 নেই
নোভা

-1

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

এখানে আমার কাজ প্রায়। স্ট্রিট্রিম () ব্যবহার করে এবং চরিত্রের দৈর্ঘ্য 10 এ সেট করা ক্ষেত্রের নামগুলি লেখার ওজিআর এর অটোমেশনের চেয়ে 10 অক্ষরে আরও কমিয়ে দেবে।

আপনার কাছে একটি সমস্যা হতে পারে যদি আপনার যদি ক্ষেত্রের নাম থাকে যা প্রথম 10 টি অক্ষরের জন্য অভিন্ন তবে আমার খুব কমই এই সমস্যাটি হয়।

আমি যখনই কোনও শেফফিল রফতানি করি প্রতিবারই এটি প্রয়োগ করি।

library(sp)
library(rgdal)

table <- data.frame(X_Coordinates = runif(10)*1000, 
                    Y_Coordinates = runif(10)*1000, 
                    LongFieldNameForData = runif(10))

p <- SpatialPointsDataFrame(SpatialPoints(table), data = table)

names(p) <- strtrim(names(points),10)

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