Страница 1 из 1
Создание полигонов по координатам txt
Добавлено: 19 июн 2014, 14:13
4endyr'
Есть у меня координаты около 5000 в txt, они идут сплошняком с замыкающей точкой, мне надо построить полигоны. через какую программу это проще всего сделать автоматизированно?
пример
401966.67 2303353.66
402007.31 2303356.64
402006.28 2303372.24
402009.37 2303372.54
402008.94 2303378.60
402005.63 2303378.40
402005.38 2303380.16
401979.52 2303379.24
401969.51 2303378.94
401964.64 2303378.38
401965.04 2303371.46
401965.59 2303365.40
401966.67 2303353.66 <= замыкающая точка
401955.94 2303377.88
401931.84 2303375.18
401877.18 2303373.65
401881.13 2303350.52
401934.00 2303350.94
401958.29 2303352.61
401955.94 2303377.88
Re: Создание полигонов по координатам txt
Добавлено: 19 июн 2014, 15:15
trir
компилятор...
Re: Создание полигонов по координатам txt
Добавлено: 19 июн 2014, 15:37
4endyr'
trir писал(а):компилятор...
так и придется идти еще и на программиста учиться?

Re: Создание полигонов по координатам txt
Добавлено: 19 июн 2014, 19:12
jerry-maori
ну если исходники именно в таком виде, как написано, то парсить полюбому придётся... причём чем-нито самописным... дальше смотреть, в чём именно вы хотите получить полигоны... ArcGIS, QGIS, *некоторый_иной*GIS.
И уже курить конкретную прогу -- чо она может, чо нет...
Пока инфы маловато... Нужно больше конкретики для бога конкретики...
Но от кодинга, как показывает практика, никуда не денешься...
Я вообще кандидатскую защищал по экологии, однако что-то последнее время больше matlab и js в моём арсенале;)
Re: Создание полигонов по координатам txt
Добавлено: 19 июн 2014, 19:53
gamm
написать программу, которая переводит все это в MIF/MID - дело примерно получаса ... так что нужно учить программирование

Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 07:37
4endyr'
ну по сути это ведь простейшее действие, я думал это уже реализовано в ГИСах Mapinfo, Панорама и т. д. последняя кстати строит по координатам из файла, но не разделяет по объектам, сплошная линия получается =(
Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 07:41
4endyr'
jerry-maori писал(а): в чём именно вы хотите получить полигоны...
ды хорошо было бы MIF/MID, а там уже в любую гис можно запихнуть
Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 08:36
trir
Формат - дело десятое, главное выбрать язык/среду. Самое простой вариант - python/QGIS, я бы выбрал C#/dotSpatial. А самый радикальный вариант C++/GDAL.
Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 08:48
Донецков
Если количество полигонов относительно невелико, то из txt в csv (или для каждого полигона свой csv, или вводить кодирование точек по принадлежности к полигону (можно полуавтоматом в Excel)...
А далее из csv генерация полигонов в выбранной ГИС, модули есть почти для каждой...
Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 09:03
gamm
trir писал(а):Формат - дело десятое, главное выбрать язык/среду. Самое простой вариант - python/QGIS, я бы выбрал C#/dotSpatial. А самый радикальный вариант C++/GDAL.
самый простой вариант - написать на R (ну не люблю я Питона за отсутствие операторных скобок)
проекцию поставил UTM37
Код: Выделить всё
p<-read.table("E:/gumus/data.txt",header=FALSE)
names(p)<-c("X","Y")
fn.mif<-"E:/gumus/pf.mif"
fn.mid<-"E:/gumus/pf.mid"
write("Version 300",file=fn.mif)
write("Charset \"Neutral\"",append=TRUE,file=fn.mif)
write("Delimiter \",\"",append=TRUE,file=fn.mif)
write(" CoordSys Earth Projection 8, 104, \"m\", 39, 0, 0.9996, 500000, 0",append=TRUE,file=fn.mif)
write("Columns 1",append=TRUE,file=fn.mif)
write(" ID Integer",append=TRUE,file=fn.mif)
write("Data",append=TRUE,file=fn.mif)
cur.ID <-1
cur.pos<-1
found <-FALSE
first <-TRUE
done <-FALSE
while(!done) {
for(i in (cur.pos+1):nrow(p)) {
if(sum((p[i,]-p[cur.pos,])^2) < 0.01^2) {
found=TRUE
break
}
}
if(!found) stop("Failed to found endpoint")
sbuf="Region 1"; write(sbuf,append=TRUE,file=fn.mif)
sbuf=sprintf("%5d",i-cur.pos+1); write(sbuf,append=TRUE,file=fn.mif)
for(ii in cur.pos:i) {
sbuf=sprintf("%.5f %.5f",p$X[ii],p$Y[ii]); write(sbuf,append=TRUE,file=fn.mif)
}
sbuf=sprintf("%d",cur.ID); write(sbuf,append=!first,file=fn.mid)
first<-FALSE
cur.ID<-cur.ID+1;
cur.pos<-i+1;
if(cur.pos >= nrow(p)) break
}
второй полигон я насильственно замкнул
Код: Выделить всё
401966.67 2303353.66
402007.31 2303356.64
402006.28 2303372.24
402009.37 2303372.54
402008.94 2303378.60
402005.63 2303378.40
402005.38 2303380.16
401979.52 2303379.24
401969.51 2303378.94
401964.64 2303378.38
401965.04 2303371.46
401965.59 2303365.40
401966.67 2303353.66
401955.94 2303377.88
401931.84 2303375.18
401877.18 2303373.65
401881.13 2303350.52
401934.00 2303350.94
401958.29 2303352.61
401955.94 2303377.88
401955.94 2303377.88
результат
Код: Выделить всё
Version 300
Charset "Neutral"
Delimiter ","
CoordSys Earth Projection 8, 104, "m", 39, 0, 0.9996, 500000, 0
Columns 1
ID Integer
Data
Region 1
13
401966.67000 2303353.66000
402007.31000 2303356.64000
402006.28000 2303372.24000
402009.37000 2303372.54000
402008.94000 2303378.60000
402005.63000 2303378.40000
402005.38000 2303380.16000
401979.52000 2303379.24000
401969.51000 2303378.94000
401964.64000 2303378.38000
401965.04000 2303371.46000
401965.59000 2303365.40000
401966.67000 2303353.66000
Region 1
7
401955.94000 2303377.88000
401931.84000 2303375.18000
401877.18000 2303373.65000
401881.13000 2303350.52000
401934.00000 2303350.94000
401958.29000 2303352.61000
401955.94000 2303377.88000
Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 09:18
Игорь Белов
Координаты уж больно похожи на какую-нибудь МСК. Тогда X и Y придётся поменять местами.
Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 09:29
gamm
ErnieBoyd писал(а):Координаты уж больно похожи на какую-нибудь МСК. Тогда X и Y придётся поменять местами.
ага, достаточно будет написать
Re: Создание полигонов по координатам txt
Добавлено: 20 июн 2014, 14:54
4endyr'
gamm писал(а):
самый простой вариант - написать на R
Спасибо огромное, все получилось

правда потратил пол дня, т.к. в программирование я очень слаб
