Ho un'app per rotaie che utilizza rgeo 0.3.19 con supporto proj4 che si collega a un database PostGIS 1.5 con la gemma rgeo-activerecord 0.4.5.RGeo Projected Buffer Polygon troppo piccolo
La mia app ha un modello chiamato Region che contiene un punto geografico, un raggio e una forma di poligono. Quando una nuova regione sta per salvarla, usa la funzione di buffer della geofactory della regione per creare un poligono usando il raggio e il punto geografico.
Ecco la geofactory che viene utilizzato per il modello di regione
GEOFACTORY = RGeo::Geographic.projected_factory(:buffer_resolution => 8, :projection_proj4 => '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m [email protected] +wktext +no_defs', :projection_srid => 3857)
Il projection_srid che sto usando è quella di Apple e Google Maps proiezione di Mercatore 3857. Il problema è che il buffer che si sta creando non ha le stesse dimensioni di quello che sto disegnando in entrambe le mappe apple o google maps. Ad esempio, se uso il costruito in funzione di MapKit MKCircle
[MKCircle circleWithCenterCoordinate:self.coordinate radius:50];
Il cerchio sarà disegnare e sovrapporre come questo.
Ma se prendo le coordinate che sono state create formano la funzione di buffer che compongono la forma poligonale nel database e li diagramma su google maps ottengo questo.
Come si può vedere, il poligono che è stato creato utilizzando lo stesso sistema di proiezione è più piccola di quanto dovrebbe essere. Questo problema cresce esponenzialmente fuori controllo in base alla dimensione del raggio definito. Ho anche provato a utilizzare la factory simple_mercator come definita in RGeo che ha prodotto gli stessi risultati.
Si spera che qualcuno abbia qualche idea sul perché, quando un longitudine, il punto proiettato sulla latitudine viene bufferizzato, crea un poligono di dimensioni errate.
Grazie per la modifica, MobileOverlord. Ho dimenticato che non c'era una funzione secante in Ruby. Questo è quello che ottengo per postare il codice senza prima provarlo ... :-) –