Ana içeriğe git

Haberler

Son İletiler

11
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen muhittin_kaplan -
Yaptıklarımı Kısaca Anlatayım Hocam
1.Verilen Offset e göre 360derece/256 datamil (1datamil 1828.8metre) lik alanda kullanılacak dosyaları buldum.
2.Bulunan bu dosyaları pandas modülü kullanarak dosya adları ile erişecek şekilde bir verisetlerine dönüştürdüm. (RAM  e aldım, dosya aç kapa yapmamak için)
3.kullanılacak dosyaların sabitlerini (originx originy cellsize) pandas ile dataset oluşturdum
4 verilen origine göre azimuth ve range bilgisinden yola çıkarak latlon buldum.
5. bu latlonlardan ram de bulunan hangi verisetinin kullanılacağını buldum,
6. irtifa bilgisini aldım.

Sonuç;
0-1 derece,
200*1828metre range
100m çözünürlülükle
yaptığım denemelerde 250san, 4saniye oranında.
tek nokta sorduğumda dosya aç kapa işlemi daha hızlı ama  sektör tarama yaptığımda arada dağlar fark var.

Kod: [Seç]
import os
import pandas as pd
import numpy as np

from osgeo import ogr, gdal
from gdalconst import *

import geopy
from geopy.distance import VincentyDistance

#debug
import time


class dtedToPandasFileClass():
    def __init__(self):

        self.dtedDIR = '/DT1'

    def findDtedFiles(self,originLat,originLon,destinationAzimuth,destinationRange):
        '''
                                                                       N
        :param originLat:                                              ^
        :param originLon:                                              |
        :param azimuth:                                                |
        :param range: in meters                                        |
        :return: Kullanılacak Olan Dosya İsimleri Listesi              | \<--azimuth
                                                      origin lat/lon-->o--------------o
                                                                       ^- - - - - - - ^--range
        '''

        origin = geopy.Point(originLat, originLon)
        kullanilacakDosyaIsimleri = []
        for i in range (destinationAzimuth):
            for z in range(0,destinationRange,1000):

                destination = VincentyDistance(meters=z).destination(origin, i)# açı ve uzaklığa göre Latlon bulunuyor
                lat = destination.latitude
                lon = destination.longitude

                if lat >= 0:
                    ns = 'N'
                elif lat < 0:
                    ns = 'S'
                if lon >= 0:
                    ew = 'E'
                elif lon < 0:
                    ew = 'W'

                dtedFile = "%(ew)s%(lon)03d/%(ns)s%(lat)02d.DT1" % {'lat': abs(lat), 'lon': abs(lon), 'ns': ns, 'ew': ew}

                dtedFilePath = os.path.join(self.dtedDIR, dtedFile)

                if os.path.isfile(dtedFilePath):
                    kullanilacakDosyaIsimleri.append(dtedFilePath)
                else:
                    print('Dosya Bulunamadı', (dtedFilePath), destinationAzimuth,destinationRange)
                    return None
        dosyalistesi=np.unique(kullanilacakDosyaIsimleri)
        return (dosyalistesi)

    def dtedToPandasDataFrame(self,dtedFileNames=[]):

        '''
        :param dtedFileNames:
        :return:
        '''
        altitudeValueDF = {}  # altitude verileri için tanımlanan DF tutulacak
        dtedFileConstDF = {}  # altitude verilerinin olduğu dosyanın sabitleri için tanımlanan DataFrame

        for fileName in dtedFileNames:
            dem = gdal.Open(fileName, GA_ReadOnly)
            altitudeValue = np.array(dem.GetRasterBand(1).ReadAsArray(), dtype="float")  # DTED file içerisindeki Altitude verileridir
            dtedFileConst = dem.GetGeoTransform()#dted file içerisindeki offset ve cell bilgileriidir.

            constSeries = pd.Series(dtedFileConst)
            dtedFileConstTempDF = pd.DataFrame.from_dict(constSeries)

            # -------------------------------------------------------------
            altitudeValueTempDF = pd.DataFrame.from_records(altitudeValue)

            keyName = fileName[-12:]
            altitudeValueDF[keyName] = altitudeValueTempDF.copy(deep=True)#dosya adıyla ulaşmak içinkullnılıyor. DF diğer DF ye copyalanırken
            # key oluşturuluyor
            dtedFileConstDF[keyName] =dtedFileConstTempDF.copy(deep=True)

        return(altitudeValueDF,dtedFileConstDF)

    def getAltitudeFromDF(self,originLat,originLon,destinationAzimuth,destinationRange,dtedDataFrameList,dtedDataFrameConst):
        '''

        :param lon:
        :param lat:
        :return:
        '''

        origin = geopy.Point(originLat, originLon)
        destination = VincentyDistance(meters=destinationRange).destination(origin, destinationAzimuth)
        lat = destination.latitude
        lon = destination.longitude

        if lat >= 0:
            ns = 'N'
        elif lat < 0:
            ns = 'S'

        if lon >= 0:
            ew = 'E'
        elif lon < 0:
            ew = 'W'
        keyString = "%(ew)s%(lon)03d/%(ns)s%(lat)02d.DT1" % {'lat': abs(lat), 'lon': abs(lon), 'ns': ns, 'ew': ew}

        Origin_X = dtedDataFrameConst[keyString].loc[0, 0]
        Origin_Y = dtedDataFrameConst[keyString].loc[3, 0]
        Cell_Size = dtedDataFrameConst[keyString].loc[1, 0]

        col_x = int(((float(lon) - Origin_X) / Cell_Size))
        row_y = int(((Origin_Y - float(lat)) / Cell_Size))

        H=(dtedDataFrameList[keyString].loc[row_y, col_x])  # pandas ters
        return(H)

start=time.time()
destinationRange=1829*200#DataMil
destinationAzimuth=2

myclass=dtedToPandasFileClass()
dosyaisimleri=(myclass.findDtedFiles(originLat=39.9250972,originLon=32.8357905,destinationAzimuth=destinationAzimuth,
                                     destinationRange=destinationRange))
dfAltitude,dfConst=(myclass.dtedToPandasDataFrame(dosyaisimleri))


print(dosyaisimleri.__len__(),' dosyaya işlem yapılacak')
for i in range (destinationAzimuth):
    for z in range (0,(destinationRange),100):
        print(i,z,myclass.getAltitudeFromDF(originLat=39.9250972,originLon=32.8357905,destinationRange=z,destinationAzimuth=i,
                                        dtedDataFrameList=dfAltitude,dtedDataFrameConst=dfConst))

stop=time.time()

print(stop-start)


kodlarda eksik fazla olabilir



12
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen Mufit Sozen -
Elimin altinda bir PC olmadigi icin kucuk bir program ornegi yazamadim.

Onerdigim prg akisini kodlayip performansi hakkinda  bilgi verirseniz makbule gecer.
13
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen muhittin_kaplan -
Hocam teşekkür ederim.
14
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen Mufit Sozen -
144 dosyanin tamami 500mb civarinda yani cok buyuk degil. Vede icindeki bilgi sabit (degisken degil).

Oyleyse
1- butun dosyalari birlestirip 1 tane TR dosyasi yaratin.
2- python ile
A- read/binary olarak dpsyayi acin
B- dosyanin tamamini okuyun.
C- dosyayi kapatin
D- program icinde yukseklik bilgisi gerektiginde degiskenin icinden indexliyerek struct modulunu kullanarak yukseklik bilgisini cekiniz

Kolay gelsin
15
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen Mufit Sozen -
144 dosyanin tamami 500mb civarinda yani cok buyuk degil. Vede icindeki bilgi sabit (degisken degil).

Oyleyse
1- butun dosyalari birlestirip 1 tane TR dosyasi yaratin.
2- python ile
 A- read/binary olarak dosyayi acin
 B- dosyanin tamamini bir degiskene okuyun.
 C- dosyayi kapatin
 D- program icinde yukseklik bilgisi gerektiginde degiskenin icinden indexliyerek struct modulunu kullanarak yukseklik bilgisini cekiniz

Kolay gelsin
16
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen muhittin_kaplan -
Hocam yaptığım işte yabancı menşei bir araç ile analizler yapılıyor. Ben bunun büyük bir kısmını hallettim. Şu an arkadaşlar kullanıyor. Ülkede 6 noktada bu program kullanılıyor. En yoğun benim bulunduğum birim kullanıyor. Bu yazdığım programı adım adım geliştirmek istiyorum. Fazlardan biriside bu.
Çözünürlülük seçilebilecek yani kullanıcı 0.1derece ile 0.1dataMil de örneklem alabilecek
Kullanılan pclerde min 4gbram, en az i5 işlemci mevcut. sonuç olarak alınan bu yükseklik bilgisiyle sorgulamalar ve hesaplamalr yapacağım.

Geldiğim nokta python kullanarak:
1.latlon bilgisi verdiğim herhangi biryerin irtifasını alabiliyorum
2. ofset verdiğim bir noktanın gerekli olan dted dosyasını tespit edebiliyorum.
3.ofset verdiğim bir  noktanın polar taraması (360derece 500km) sonucu irtifa haritasını çıkartabiliyorum (çok uzun sürüyor, problemim bu)
4 bir dosyanın (örneğin E26N38) verilerini python pandas modulune dataframe geçebiliyorum

Şu an üzerinde çalıştığım, belirlediğim dosyaların hepsini RAM e alacağım, böylelikle dosya aç kapa dan kaynaklı olan geçikmenin önüne geçeceğim.(python pandas modülünü kullanarak)
(dted1 yaklaşık 2.9 mb 100dosya ile işlem yapsam -genelde 70 lerde çıkıyor- 290mb yapar. dted2 nasıl olacak bilemiyorum 3gb gibi bir veri oluşacak ram de)

Diğer bir fikirde de bir img olarak düşünmek ve opencv gibi bir araçla işlem yapmak.
17
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen Mufit Sozen -
Bu uygulama isinizlemi alakali yoksa odev, proje hobi gibi birseymi?

Cozumun ne kadar profesyonel olmasi bekleniyor?

DTED datasina hangi siklikta erisilecek (erisim yogunlugu/frekansi nedir)?

Kullandiginiz bilgisayarin hafizasi, OS, hizi vb nedir.

Uygulama ve donanim ortami hakkinda detayli bilgi verirseniz daha dogru onerilerde bulunabiliriz.
18
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen muhittin_kaplan -
Konuyu ötelemiştim, her ötelenen mesele gibi, sonunda karşımıza çıktı.
HGT-0-1 yi python kullanarak enlem boylam vererek yükseklik verisini okuyabiliyorum.
Burada problemim başlıyor, HGT Level1 1200x1200 lük çözünürlülüge sahip. 1dereceyi enlem ve boylamda 1200 e bölmüş.
Her Enlem/Boylam Sorma işleminde Hangi Dosyanın Kullanılması gerektiğini buluyor, ve bulunan dosyanın içindeki index e göre gidip yüksekliği alıyor. Dosya Aç Kapa epey bir zaman alıyor. Ayrıca bunu birçokkez yapacağım (183.960.000max) bu yüzden uykularım kaçıyor.

Daha efektif çözüm yolları aramaktayım.
Malum olduğu üzere ülkemiz 26-45Doğu 36-42 kuzey de dolayısıyla 144 dosya mevcut.

Güzel ülkemizin verileri http://galileo.selcuk.edu.tr/~tsym3/trdem2/?C=N;O=A