Автор Тема: point in polygon  (Прочетена 1984 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Pitankata

  • Мно'о доблестни
  • Hero Member
  • ***
  • Благодарности
  • -Казани: 89
  • -Получени: 136
  • Публикации: 1321
  • ПАЗИТЕЛ НА ЧАТА
point in polygon
« -: 01 Декември 2014, 12:00:40 »
привет, младежи
аз отново и както винаги имам нужда от помощ ...

значи имам следното парче код ...

Код: Python
  1. import spots
  2. data = spots.data()
  3.  
  4. lat = 41.577423
  5. lon = 24.701114
  6.  
  7. myCoordinates = {'lat': lat, 'lon': lon }
  8.  
  9. def findSpot(xy,poly):
  10.  
  11.     poly = (poly['latitude'], poly['longitude'])
  12.     n = len(poly[0])
  13.     inside =False
  14.    
  15.     for i in range(n):
  16.  
  17.         p1x = poly[1][i]
  18.         p1y = poly[0][i]
  19.         p2x = poly[1][i % n]
  20.         p2y = poly[0][i % n]
  21.         if myCoordinates['lat'] > min(p1y,p2y):
  22.             if myCoordinates['lat'] <= max(p1y,p2y):
  23.                 if myCoordinates['lon'] <= max(p1x,p2x):
  24.                     if p1y != p2y:
  25.                         xinters = (myCoordinates['lat']-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
  26.                     if p1x == p2x or myCoordinates['lon'] <= xinters:
  27.                         inside = not inside
  28.         p1x,p1y = p2x,p2y
  29.  
  30.     return inside
  31.  
  32.  
  33. for x in data:
  34.         #print x
  35.         if(findSpot(myCoordinates, x)):
  36.             print (x['color'])
  37.         else:
  38.             print ('да го е*а')
  39.  
е не си мислете че сам съм го писал :о)))) и точно поради тази причина не мога да разбера къде бъркам ...
в този вид кода не ме открива никъде из полигоните ...

целта на цялото нещо да ме открие само в 1 полигон

полигоните тъй като са над 500к файл и нема де да ги кача мое да се видят тук
Мързелът всъщност е доста гадна работа, не можеш да спреш за да си починеш...

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1002
  • Кибик
Re: point in polygon
« Отговор #1 -: 01 Декември 2014, 12:37:36 »
По щирина и дължина от гпс-а трябва да та намери къде си дали в синия, лилавия и т.н.
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

Pitankata

  • Мно'о доблестни
  • Hero Member
  • ***
  • Благодарности
  • -Казани: 89
  • -Получени: 136
  • Публикации: 1321
  • ПАЗИТЕЛ НА ЧАТА
Re: point in polygon
« Отговор #2 -: 01 Декември 2014, 12:42:14 »
По щирина и дължина от гпс-а трябва да та намери къде си дали в синия, лилавия и т.н.
точно така ... но тъй като у нас няма смисъл от жипиеса (който още го и нямам де) съм си хардкорднал координатите на спалнята ми ;) (не идвайте не съм дащен ;о)))

lat = 41.577423
lon = 24.701114

и спрямо тези координати трябва да и намери само един спот който е лилав ...
Мързелът всъщност е доста гадна работа, не можеш да спреш за да си починеш...

Pitankata

  • Мно'о доблестни
  • Hero Member
  • ***
  • Благодарности
  • -Казани: 89
  • -Получени: 136
  • Публикации: 1321
  • ПАЗИТЕЛ НА ЧАТА
Re: point in polygon
« Отговор #3 -: 01 Декември 2014, 14:49:00 »
да се възползвам докато няма слято мнение :оРРР

оправих се някак ... май основния проблем е бил, че малко бъркам кое е Latitude и кое е Longitude

та ето как се справих ако на някой му е интересно ...

Код: Python
  1. import spots as data
  2. data = data.data()
  3.  
  4. def findSpot(x,y,poly):
  5.  
  6.     n = len(poly)
  7.     inside = False
  8.  
  9.     p1x,p1y = poly[0]
  10.     for i in range(n+1):
  11.         p2x,p2y = poly[i % n]
  12.         if y > min(p1y,p2y):
  13.             if y <= max(p1y,p2y):
  14.                 if x <= max(p1x,p2x):
  15.                     if p1y != p2y:
  16.                         xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
  17.                     if p1x == p2x or x <= xints:
  18.                         inside = not inside
  19.         p1x,p1y = p2x,p2y
  20.  
  21.     return inside
  22.  
  23.  
  24. for x in data:
  25.      combs = []
  26.      n= len(x['longitude'])
  27.      i = -1
  28.      while i < n-1:
  29.          i = i+1
  30.          combs.append((x['longitude'][i], x['latitude'][i]))
  31.      if(findSpot(myCoordinates['lon'],myCoordinates['lat'], combs)):
  32.          print ('The color is:', x['color'])
  33.          print ('The ID is: ', x['id'])
  34.  

и резултата:

Код: Python
  1. >>>
  2. The color is: violet
  3. The ID is:  38
  4. >>>
  5.  
Мързелът всъщност е доста гадна работа, не можеш да спреш за да си починеш...

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1002
  • Кибик
Re: point in polygon
« Отговор #4 -: 01 Декември 2014, 16:48:06 »
За да няма объркации, при корабоплаването има правило данни като тези: 34.22,07N; 39.20,17E се дават така  34.22,07N; 039.20,17E (пред дължината се слага нула).
« Последна редакция: 01 Декември 2014, 20:37:01 от HanKrum »
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

Wanderer

  • Full Member
  • ***
  • Благодарности
  • -Казани: 4
  • -Получени: 26
  • Публикации: 196
Re: point in polygon
« Отговор #5 -: 01 Декември 2014, 19:45:30 »
Питанке, я разкажи какво е това и каква е идеята, че ми стана интересно  :P
“You must make the Journey along the road, nobody is able to do it for you!”

Pitankata

  • Мно'о доблестни
  • Hero Member
  • ***
  • Благодарности
  • -Казани: 89
  • -Получени: 136
  • Публикации: 1321
  • ПАЗИТЕЛ НА ЧАТА
Re: point in polygon
« Отговор #6 -: 01 Декември 2014, 19:53:37 »
Питанке, я разкажи какво е това и каква е идеята, че ми стана интересно  :P
на кратко:

ето това трябва да е крайният резултат от целите ми родилни мъки ...
а на широко ко искаш моа да отворя нова тема и да си излея мъката :о)
ко има въпроси тук съм :)
Мързелът всъщност е доста гадна работа, не можеш да спреш за да си починеш...

Wanderer

  • Full Member
  • ***
  • Благодарности
  • -Казани: 4
  • -Получени: 26
  • Публикации: 196
Re: point in polygon
« Отговор #7 -: 01 Декември 2014, 20:00:18 »
Много яко :D старата сателитна имаше мотор за позициониране, ама почти не е ползван, после нещо се развали  :(

Иначе за какво ти е това 007 чудо, ако не е тайна де ?
“You must make the Journey along the road, nobody is able to do it for you!”

Pitankata

  • Мно'о доблестни
  • Hero Member
  • ***
  • Благодарности
  • -Казани: 89
  • -Получени: 136
  • Публикации: 1321
  • ПАЗИТЕЛ НА ЧАТА
Re: point in polygon
« Отговор #8 -: 01 Декември 2014, 20:02:41 »
Много яко :D старата сателитна имаше мотор за позициониране, ама почти не е ползван, после нещо се развали  :(

Иначе за какво ти е това 007 чудо, ако не е тайна де ?

BUL007 е на Нова Броудкастинг Груп мойто още нема цифри (дай боже някой ден да имам)
това е сателитен интернет бате през който прекарвам видео стрийм дет са вика по модерно му Video On Demand
Мързелът всъщност е доста гадна работа, не можеш да спреш за да си починеш...