Ana içeriğe git

Haberler

Son İletiler

1
Kategorisiz / tracing plots
Son İleti gönderen muhittin_kaplan -
Merhaba.
1200x1200 lük bir alanda, yerleri belli olmadan başlayabilen,ardışık olarak gelen  noktaların arasındaki ilişkiyi kurmam gerekiyor.
Örnek Olması Açısından snake oyunundakini yılanı ele alalım, bu uygulamada çarpma vb olaylar yok ama birden fazla yılan var ve bu yılanların kuyrukları birbirinin üstünden geçebiliyor. Kuramaya çalıştığım algoritmada bu yılanları birbirinden ayırmaya yönelik olacak.
Ben şu anda bunu adım adım oynatarak ve her yeni zamanda yılanın kafasını ilgili diziye ekleyerek yapıyorum. böylelikle her yılanı ayrı ayrı takip edebiliyorum.
bunu nasıl yapabileceğim hakkında fikirlere ihtiyacım var ?
2
STM32 Serisi / Yeni düşük güç STM32 Mikrolar
Son İleti gönderen MC_Skywalker -
Ayın 14'ünde STM yeni düşük güç MCUları tanıtacak

3
STM32 Serisi / Ynt: SSD1306 OLED u8glib Kullanımı
Son İleti gönderen MC_Skywalker -
Benim bu videolardan ikisi meşhur olmuş galiba elemanın biri sitedine gömmüş :)

https://youtu.be/m2WiLw79UqI
https://youtu.be/YHuHMY254Z4



4
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen Mufit Sozen -
Sizin öneriniz Tek Dosya oluşturup onu ram de tutmamdı. Ben dosyaları isimleriyle ulaşabilecek şekilde ram e attım.

Bunun icin pandas gibi bir library'e ihtiyac yok aslinda. Bir liste yada dictionary kolaylikla ayni isi gprirdu ( sizin kullanim amaciniza uygun olarak) Bence gereksiz bir komplex ve overhead getiren yol secilmis.

Dosyalarin icerigi ise sadece raw bilgi iceriyor. Bunlara erisim hafizadan indexleyerek kolayca yapilabilir.144 dosyayi birden ayri degiskenlerle yukleyerek hafizada tutabilirsiniz. Ilerde cpzunurluk artarda hafiza ile sikinti olur ise hem fiziksel hemde virtual hafizayi artirmak daha kolay ve hizli bor cozum olur.
5
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen muhittin_kaplan -
Sizin öneriniz Tek Dosya oluşturup onu ram de tutmamdı. Ben dosyaları isimleriyle ulaşabilecek şekilde ram e attım.
6
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



7
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.
8
Kategorisiz / Ynt: DTED MAP file nedir
Son İleti gönderen muhittin_kaplan -
Hocam teşekkür ederim.
9
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
10
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