Domanda

Ho un problema simile a questo post . Devo visualizzare fino a 1000 poligoni su una mappa di Google incorporata. I poligoni si trovano in un database SQL e posso renderli ciascuno come un singolo file KML al volo usando un HttpHandler personalizzato (in ASP.NET), come questo http://alpha.foresttransparency.org/concession.1.kml .

Anche sulla mia macchina di sviluppo (molto veloce), ci vuole un po 'per caricare anche una dozzina di forme. Quindi due domande, davvero:

  1. Quale sarebbe una buona strategia per renderli come marcatori invece di sovrapposizioni quando avrò superato un certo livello di zoom?

  2. Esiste un algoritmo disponibile pubblicamente per semplificare un poligono (riducendo il numero di punti) in modo che non mostri più punti di quanto abbia senso a un certo livello di zoom?

È stato utile?

Soluzione

Per la tua seconda domanda: devi Algoritmo di generalizzazione Douglas-Peucker

Altri suggerimenti

Per la tua prima domanda, potresti calcolare l'area di un particolare poligono e mettere in relazione ciascun livello di zoom con una particolare area minima, così quando ingrandisci o riduci il poligono scompare e gli indicatori appaiono in base al livello di zoom.

Per la seconda domanda, utilizzerei il suggerimento di Mark Bessey.

Non conosco molto su KML, ma penso che la solita soluzione alla domanda n. 2 implichi l'iterazione sui punti e l'eliminazione di segmenti di linea di una certa dimensione. Ciò causerà alcuni "sfortunati" effetti in alcuni casi, ma è relativamente veloce e facile da fare.

Consiglierei 2 cose: - Calcola e combina poligoni che si toccano. Ciò comporta MOLTE elaborazioni e matematica difficile, ma l'ho fatto quindi so che è possibile. - Crea il tuo overlay invece di utilizzare KML in formato PNG, mentre li combini nel suggerimento precedente. Dovrai creare MOLTI PNG ma è velocissimo sul client.

Buona fortuna :)

Avevo bisogno di una soluzione alla tua domanda n. 2 un po 'di tempo fa e dopo aver esaminato alcuni degli algoritmi di semplificazione della linea disponibili, ho creato il mio.

Il processo è semplice e sembra funzionare bene, anche se può essere un po 'lento se non lo si implementa correttamente:

P[0..n[ è la tua gamma di punti  Consenti a T[n[ di essere definito come il triangolo formato da punti P [n-1], P [n], P [n + 1 ]  Max è il numero di punti a cui stai tentando di ridurre questa linea.

  1. Calcola l'area di ogni possibile triangolo T [1..n-1] nell'insieme.
  2. Scegli il triangolo T [i] con l'area più piccola
  3. Rimuovi il punto P [i] per appiattire sostanzialmente il triangolo
  4. Ricalcola l'area dei triangoli interessati T [n-1], T [n + 1]
  5. Vai al passaggio n. 2 se il numero di punti > Max
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top