W tym samym miejscu w samym czasie.

0

Witam,

Przepraszam za tytuł jednak nic lepszego mi nie przychodzi do głowy problem wydaje mi się że raczej jest natury teoretycznej a niżeli technicznej ale do rzeczy.

Tak wygląda moja encja:

**GEO_TRACK **

Nazwa klumny Typ danych
geo_track_id int
langtitude double
longtitude double
datetime time
user int

A czego ja oczekuje z tych danych to "wyciąganie" danych jakich jak w tytule :) osób, które mogły by mieć kontakt pośredni lub bezpośredni w zakreślonym czasie.

Moje dylematy:

  • zwalić ile się da na bazę danych
  • mielić to w aplikacji

Pomijam: nie interesują mnie wyniki starsze niż 24 godziny takich z założenia nie będzie.

1

langtitude -> latitude
longtitude -> longitude
w skrócie moje oczy krwawią...
2. Moze lepiej jakaś baza przestrzenna w takim razie? Ale jak musisz w relacyjnej to logikę wrzuciłbym w aplikacje oczywiście.

0

żeby to było "w tym samym miejscu" to jeszcze wysokość jest potrzebna ;-)

0
Shalom napisał(a):

langtitude -> latitude
longtitude -> longitude
w skrócie moje oczy krwawią...
2. Moze lepiej jakaś baza przestrzenna w takim razie? Ale jak musisz w relacyjnej to logikę wrzuciłbym w aplikacje oczywiście.

Przepraszam troszke w pospiechu jest poprawnie latitude, longitude.

Co do bazy nie wiem czy przesadzam ale ile sie da zwalilbym na nią lub tworzenie półproduktów tworzenie cięźkich młynków przeraża mnie chciałbym miec dobre fundamenty. Myślałem o sprytnych widokach tak by oszczedzic zaciagania tysiecy rekordów.

Wstępnie nastawiałem się procedury, funkcje, wyzwalacze.

0

JAKA BAZA??

0
abrakadaber napisał(a):

JAKA BAZA??

mySQL

1

Bedzie Ci bardzo trudno wyszukac osoby w tym samym miejscu bez jakiegos bufora chociazby 5 metrowego. Nie mowie, ze nie mozesz tego wykonac w czystym SQLu ale zaprzegniecie funkcji z bazy pewnie by troche ulatwilo, szczegolnie jesli myslisz jeszcze o jakichs operacjach geometrycznych.

Moja propozycja to postgresql z rozszerzeniem postgis.
Dlugosc i szerokosc geometryczna reprezentowac mozesz przez typ POINT(z postgisa). Pondato, w domysle myslisz zapewne o ukladzie wspolrzednych WGS84 a jest ich wiele wiecej, ich obsluge wspiera rozszerzenie o ktorym wspomnialem.

EDIT:
Nie doczytalem, ze mySQL

0
Swr napisał(a):

Bedzie Ci bardzo trudno wyszukac osoby w tym samym miejscu bez jakiegos bufora chociazby 5 metrowego. Nie mowie, ze nie mozesz tego wykonac w czystym SQLu ale zaprzegniecie funkcji z bazy pewnie by troche ulatwilo, szczegolnie jesli myslisz jeszcze o jakichs operacjach geometrycznych.

Moja propozycja to postgresql z rozszerzeniem postgis.
Dlugosc i szerokosc geometryczna reprezentowac mozesz przez typ POINT(z postgisa). Pondato, w domysle myslisz zapewne o ukladzie wspolrzednych WGS84 a jest ich wiele wiecej, ich obsluge wspiera rozszerzenie o ktorym wspomnialem.

EDIT:
Nie doczytalem, ze mySQL

Co do czystego SQL wydłubałem sobie już funkcie obliczające dystansy dla dwóch współrzędnych oczywiście delta ma być zmienna i jestem tego świadomy że nie mogą to być dokładnie te same współrzędne wskazany przez Ciebie dystans właśnie sam wykorzystuje.

Mój problem na tę chwilę to nieznajomość na tyle dobra SQL abym mógł rozszerzyć standardowe sortery czy też komparatory tu troszkę utknąłem lub tez jakiś widok ?

Na chwilę obecną zainteresowałem się i ponoć mySQL majakies "geo" implementacje https://en.wikipedia.org/wiki/Spatial_database

Wysokość, szerokość to minimum jak również maksimum potrzeb wymiar czasu już zupełnie to komplikuje :)

@Swr https://dev.mysql.com/doc/refman/5.7/en/spatial-datatypes.html
Przejście na postgresql to spory narzut muszę to przemyśleć zbadać.

1

za http://gis.stackexchange.com/questions/8650/how-to-measure-the-accuracy-of-latitude-and-longitude

Using these ideas we can construct a table of what each digit in a decimal degree signifies:

  • The sign tells us whether we are north or south, east or west on the globe.
  • A nonzero hundreds digit tells us we're using longitude, not latitude!
  • The tens digit gives a position to about 1,000 kilometers. It gives us useful information about what continent or ocean we are on.
  • The units digit (one decimal degree) gives a position up to 111 kilometers (60 nautical miles, about 69 miles). It can tell us roughly what large state or country we are in.
  • The first decimal place is worth up to 11.1 km: it can distinguish the position of one large city from a neighboring large city.
  • The second decimal place is worth up to 1.1 km: it can separate one village from the next.
  • The third decimal place is worth up to 110 m: it can identify a large agricultural field or institutional campus.
  • The fourth decimal place is worth up to 11 m: it can identify a parcel of land. It is comparable to the typical accuracy of an uncorrected GPS unit with no interference.
  • The fifth decimal place is worth up to 1.1 m: it distinguish trees from each other. Accuracy to this level with commercial GPS units can only be achieved with differential correction.
  • The sixth decimal place is worth up to 0.11 m: you can use this for laying out structures in detail, for designing landscapes, building roads. It should be more than good enough for tracking movements of glaciers and rivers. This can be achieved by taking painstaking measures with GPS, such as differentially corrected GPS.
  • The seventh decimal place is worth up to 11 mm: this is good for much surveying and is near the limit of what GPS-based techniques can achieve.
  • The eighth decimal place is worth up to 1.1 mm: this is good for charting motions of tectonic plates and movements of volcanoes. Permanent, corrected, constantly-running GPS base stations might be able to achieve this level of accuracy.
  • The ninth decimal place is worth up to 110 microns: we are getting into the range of microscopy. For almost any conceivable application with earth positions, this is overkill and will be more precise than the accuracy of any surveying device.
  • Ten or more decimal places indicates a computer or calculator was used and that no attention was paid to the fact that the extra decimals are useless. Be careful, because unless you are the one reading these numbers off the device, this can indicate low quality processing!

można przyjąć, że jak obetniesz do 4 miejsc po przecinku to będziesz miał "w tym samym miejscu" obejmujące ok 20x20m. Czyli jak zrobisz

select round(long, 4) long, round(lat, 4) lat, user from gps where datetime between data1 and data2 group by round(long, 4), round(lat, 4) order by 1, 2

to masz dużą szansę, że te odczyty, które mają takie same lat i long były w max odległości od siebie ok 15m. Przy zaokrągleniu do 3 miejsc masz max odległość 155m.

0

Nie miało być żadnych technikli ale dla potomnych a nuż się przyda bardzo fajny dokument pomijając fakt jak zrobić skończywszy na optymalizacji http://www.arubin.org/files/geo_search.pdf

1 użytkowników online, w tym zalogowanych: 0, gości: 1