Question

J'utilise OpenLayers pour afficher des cartes OpenStreetMap. (Bien que, je suppose cela devrait être assez général pour travailler pour tous les produits de carte ...)

Je l'affichage des superpositions de vecteurs très sophistiqués, ainsi que le montant et la résolution des caractéristiques que je suis de retour du serveur via GeoJSON à superposition a prouvé trop pour de nombreux ordinateurs.

Ce que je voudrais faire maintenant est plutôt d'envoyer uniquement les données qui conviennent à la résolution du zoom actuel. Cela devrait être relativement facile à faire en utilisant les méthodes de getResolution et calculateBounds sur l'objet Map. calculateBounds retourne un objet Bounds qui peut ensuite être transformée entre la saillie de projection de la carte et l'écran.

Comment puis-je transformer la résolution dans ma projection désirée (4326 dans ce cas)? Y at-il construit dans le moyen de le faire ou dois-je exécuter la résolution contre une formule connue?

Était-ce utile?

La solution

Vous pouvez utiliser proj4js pour transformer les systèmes de coordonnées sur le client.

Autres conseils

Que diriez-vous simplement limiter l'échelle à laquelle votre couche de vecteur GeoJSON va dessiner?

http: //dev.openlayers .org / docs / fichiers / OpenLayers / Layer-js.html # OpenLayers.Layer.maxScale

Ensuite, les OpenLayers requêtes AJAX vers le serveur ne déclencher au-delà de cette échelle. Choisissez un niveau échelle / zoom OpenSteetMaps qui correspond au moment où vous voulez montrer la couche vectorielle et configurées en conséquence maxScale.

Les demandes doivent être automatiquement l'envoi des limites de l'affichage de la carte en cours sur votre serveur pour obtenir les caractéristiques pertinentes.

j'ai mal compris votre dilemme bien. Si vous voulez que les formules de résolution cet article les décrit:

http://msdn.microsoft.com/en-us/library /aa940990.aspx

Mise à jour

Vous pouvez mettre en œuvre une stratégie de regroupement dans OpenLayers. Je pense que cela devrait réduire le temps de rendu, même si je suppose que la même quantité de données serait renvoyé de la base de données.

http: / /dev.openlayers.org/releases/OpenLayers-2.7/doc/apidocs/files/OpenLayers/Strategy/Cluster-js.html

Consultez l'exemple ici:

http://openlayers.org/dev/examples/strategy-cluster.html

Pour éviter d'avoir différents points de taille que vous accentuez la Sould pointRadius: « $ {} rayon » à une constante.

Enfin une alternative serait d'utiliser un service de WMS plutôt que GeoJSON, le serveur alors être images retour d'une taille fixe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top