Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Skrypt do generowania siatki w google maps
Forum PHP.pl > Forum > Przedszkole
warland
Poniżej kod skryptu samodzielnie uruchamianego do generowania siatki pod google maps.
Skrypt działa bez problemu jednak potrzebuje pomocy w usprawnieniu jego działania.

W tej chwili skrypt generuje koordynaty w danym obszarze mapy na podstawie lat_limit i lng_limit. Wartości te można zmieniać przez co można ograniczyć pole w którym będzie tworzona siatka.
Problem polega na tym że nie potrafię dopisać funkcji które by precyzowały dokładniej te pole.
W tej chwili po wpisaniu wartości np. przy lat_limit=50 skrypt generuje kordy lat z przedziału od -50 do +50
Czy może mi ktoś pomóc by zawęzić te pole do min i max lat i lng limit? Tak by np. tworzyło siatkę w przedziale lng od 20 do 30 i lng od -5 do 8 questionmark.gif

  1. <?php
  2.  
  3. $box_size = 12;
  4.  
  5. // liczby 84 i 180 są maksymalną wielkością (od ujemnej do dodatniej) mapy google
  6. $lat_limit = 84;
  7. $lng_limit = 180;
  8.  
  9. $result = '';
  10.  
  11. $land_insert_statement = "INSERT INTO `pozycja`
  12. (`lat`, `lng`)
  13. VALUES";
  14.  
  15. $result .= $land_insert_statement;
  16. $result .= '<br>';
  17.  
  18. $i = 12;
  19. for ($lng = -$lng_limit; $lng <= $lng_limit; $lng = $lng + $box_size) {
  20.  
  21. for ($lat = -$lat_limit; $lat < $lat_limit; $lat = $lat + $box_size) {
  22. // Zapobiega błędowi, w którym -180 i 180 nakładają się, tworząc ląd, do którego interfejs użytkownika nie może uzyskać dostępu
  23. if ($lng != '-180') {
  24. $result .= "' . $lat . ', ' . $lng . '";
  25. if ($i % 1000 == 0)
  26. {
  27. $result .= ';';
  28. $result .= '<br>';
  29. $result .= $land_insert_statement;
  30. $result .= '<br>';
  31. } else {
  32. $result .= ',';
  33. }
  34. $result .= '<br>';
  35. $i++;
  36. }
  37. }
  38. }
  39.  
  40.  
  41. $search = ',';
  42. $replace = ';';
  43. $result = strrev(implode(strrev($replace), explode($search, strrev($result), 2)));
  44.  
  45. echo $result;
nospor
No przeciez w tych dwoch forach
for ($lng = -$lng_limit; $lng <= $lng_limit; $lng = $lng + $box_size) {
for ($lat = -$lat_limit; $lat < $lat_limit; $lat = $lat + $box_size) {

Lecisz po limit. No to zamiast
-$lng_limit
wstaw sobie inna wartosc jak chcesz. To samo z drugim for

ps:
Mozesz mi napisac slownie co ten kod robi
$result = strrev(implode(strrev($replace), explode($search, strrev($result), 2)));
?

oraz czy mozesz mi napisac czemu odwracasz kolejnosc w tekscie ';'? Bo wiesz, po odwroceniu to nadal bedzie ';'
strrev($replace)

ps2: i czemu w ogole na sztywno wkladasz siatke do bazy? Przeciez siatke mozesz sobie wygenerowac pozniej w dowolnym momencie. Nie ma najmniejszego sensu wkladac jej wspolrzednych do bazy razem ze wspolrzednymi jakis tam normalnych punkow
warland
ponieważ skrypt gry którą mam korzysta z tych punktów do utworzenia pól gry
tu jest gotowy przykład zastosowania punktów na mapie (nałożone na Polskę)
https://cvinto.pl/land/world/7

udało mi się ten skrypt poprawić by generował punkty tylko w danej lokalizacji w ten sposób:

  1. $lat_limit = 55;
  2. $lat_limit_min = 48;
  3. $lng_limit = 25;
  4. $lng_limit_min = 13;
  5.  
  6. $result = '';
  7.  
  8. $land_insert_statement = "INSERT INTO `pozycja`
  9. (`lat`, `lng`)
  10. VALUES";
  11.  
  12. $result .= $land_insert_statement;
  13. $result .= '<br>';
  14.  
  15. $i = 12;
  16. for ($lng = $lng_limit_min; $lng <= $lng_limit; $lng = $lng + $box_size) {
  17.  
  18. for ($lat = $lat_limit_min; $lat <= $lat_limit; $lat = $lat + $box_size)


Nie wiem czy dobrze ale działa.
Co do tego kodu o który pytasz to tak mi poleciła osoba która pomagała mi ten generator zrobić by punkty potem odczytywał skrypt gry w odpowiedni sposób.
Ja dopiero się uczę i większości robię po omacku mimo że mam już 45 na karku.

Kolejnym teraz krokiem będzie wpisanie w kod gry możliwości oczyszczenia mapy z pól wykraczających poza obszar np. Polski. Bo bawić się w usuwanie pojedynczych rekordów z bazy to nie bardzo mi się uśmiecha.
Czyli jak sobie nie poradzę to pewnie zaraz znów kolejny post pójdzie smile.gif Ale dzięki temu forum i osobom, które może nie pomagają wprost ale odpowiednio zasugerują rozwiązanie, moja świadomość kodowania jest coraz wyższa.
nospor
Cytat
ponieważ skrypt gry którą mam korzysta z tych punktów do utworzenia pól gry
Ja to rozumiem. Ja ci tylko tlumacze, ze by to zrobic nie musisz tego zapisywac do bazy. Siatke na mape mozesz wstawic bez bezsensowego zapisywania jej w bazie.

Cytat
Co do tego kodu o który pytasz to tak mi poleciła osoba która pomagała mi ten generator zrobić by punkty potem odczytywał skrypt gry w odpowiedni sposób.

No to troche lipa ze pomaga ci osoba, ktora sama ledwo ogarnia temat. No ale tak bywa.
Z drugiej strony sam moglbys troche patrzec co ci daja. Naprawde uwazasz, ze ten kod:
strrev(';')
ma jaki kolwiek sens? Ze odwrocenie kolejnsci znakow w tekscie ';' zrobi cokolwiek?
warland
cały mechanizm gry oparty jest o siatkę polygons z wykorzystaniem api google maps.
Nie bardzo jest możliwość ominięcia wciśnięcia koordynatów w bazę danych.
Ma to swoje minusy np. przy utworzeniu wizualizacji graficznej danego pola. Ale pomału do przodu.
Dziwne jest to że przy próbie pozbycia się strrev(';') kompletnie sypie się próba tworzenia przez skrypt gry pól gry na podstawie wygenerowanych całkiem innych koordynatów bez tej zmiany.
Ale to już kwestie dla mnie do zrozumienia w przyszłości.

Wiem że moja praca zalatuje amatorszczyzną ale krok po kroku idę w kierunku podstawowej kreacji samej rozgrywki na nowo.
Jeśli sama idea się przyjmie wtedy poproszę już doświadczonych programistów którzy przyjmą komercyjne zlecenie na stworzenie już w pełni profesjonalnego kodu tej gry.

Na razie sam i przy pomocy niektórych osób wprowadzam swoje pomysły do skryptu i przez to trochę poznaje tajniki programowania.
Pewnie dzięki takim wyzwaniom potem bardziej doceniam pracę tych którzy wykonają zlecenie.

Na tą chwilę szukam kogoś kto choć trochę mi pomoże, udzieli wskazówek względem wykorzystania api google czyli potrzebuje kogoś kto zna się na tym całym google maps bo znów utknąłem w kolejnym miejscu (dodanie markerów tylko do wybranych pól siatki).

Dziękuję za zainteresowanie i pomoc. Wszelkie wskazówki pomagają w próbie pokonania problemów. Bo jak to mówiąc.. nie ma problemu którego nie da się rozwiązać. Kwestia podejścia do tego.

Aktualizacja:

Może ktoś jest w stanie pomóc mi w tym kolejnym problemie. Piszę w tym wątku by nie zaczynać kolejnego tematu.

https://cvinto.pl/game2.php

W linku część kodu skryptu oraz dokładne wyjaśnienie problemu.
Potrzebuje by markery wyświetlały się tylko dla pól siatki ze spełnionym warunkiem.
nospor
Cytat
Dziwne jest to że przy próbie pozbycia się strrev(';') kompletnie sypie się próba tworzenia przez skrypt gry pól gry

Ja ci nie kazalem sie pozbywac tekstu ';'. Ja ci tylko mowiklem ze robienie strrev na tym tekscie nie ma zadnego sensu....

Zamiast
strrev(';')
miales poprostu dac
';'

Cytat
cały mechanizm gry oparty jest o siatkę polygons z wykorzystaniem api google maps.
Nie bardzo jest możliwość ominięcia wciśnięcia koordynatów w bazę danych.

Ja rozumiem ze jest to api google maps. I w ktorym miejscu api google maps masz napisane ze wymaga to bycia w bazie danych? Przeciez w zrodle strony widze wyraznie ze te punkty sa w tym zrodle wiec baza ma sie nijak do wymogu. Czy one w kodzie html pojawia sie z bazy czy nie to dla google maps wszystko jedno.
warland
nie bardzo widzę gdzie w źródle są te kordy..
Przecież to nie jest zwykła siatka a wielokąty wypełnione czyli tzw polygons.
Co mi to da jak umieszczę np w pliku kml 15000 współrzędnych polygon do jednej mapy? Chyba jednak będzie i tak wydajniej by było to w bazie. Jeżeli weźmiemy jeszcze że do kilku map część współrzędnych będzie wspólna to tym bardziej nie ma sensu kombinować z umieszczeniem do każdej mapy do osobnego pliku.

ale może źle myślę.. jednak na tą chwilę to działa dobrze i pomaga w utworzeniu alternatywnych metod wkomponowania w pola reguł nie akceptowalnych normalnie w google maps api.


Prośba:

Może ktoś jest w stanie pomóc mi w tym kolejnym problemie. Piszę w tym wątku by nie zaczynać kolejnego tematu.

https://cvinto.pl/game2.php

W linku część kodu skryptu oraz dokładne wyjaśnienie problemu.
Potrzebuje by markery wyświetlały się tylko dla pól siatki ze spełnionym warunkiem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.