Quelle est la meilleure façon d'afficher des milliers de polygones dans Openlayers?

10

J'essaie de créer une carte Openlayers qui affichera des milliers de polygones. Et lorsque l'utilisateur clique sur chacun, je veux que certaines des métadonnées s'affichent. Travailler avec ce grand ensemble de données semble être difficile. Mais j'essaie de comprendre s'il existe une façon standard de procéder. À ce stade, je pense que je devrais soit

  1. afficher mes polygones avec WMS et utiliser getfeatureinfo
  2. Affichez avec WFS, chargez avec Strategy.BBOX et utilisez GetFeature pour obtenir des données de viande.

Existe-t-il un moyen logique qui me manque pour charger toutes ces données dans une carte et avoir une bonne vitesse. Je regardais cette page et essayais de comprendre ce qu'ils faisaient: http://protectedplanet.net/

KyleK
la source

Réponses:

5

Je n'aime pas la stratégie BBOX car je pense qu'elle pourrait être lente en raison de la quantité de demandes qui peuvent être générées.

J'utiliserais une combinaison des deux choses que vous avez mentionnées.

afficher les polygones avec WMS et utiliser getfeatureinfo ... puis utiliser WFS, pour charger le contour de la fonction lorsque vous cliquez dessus et / ou obtenir plus d'informations de la base de données.

protectedplanet.net n'utilise pas les openlayers, juste google maps. Ils stockent probablement toutes les informations dans un fichier KML / KMZ.

CaptDragon
la source
Grand merci! Je suppose que je suis alors sur la bonne voie. Mais je me demande si protectedplanted utilise KML, dois-je le faire pour sa vitesse? Et ces données KML sont-elles servies par WFS?
KyleK
Je ne sais pas avec certitude s'il s'agit de KML, juste une supposition. Mais si c'est le cas, il n'est pas servi par WFS car WFS utilise GML. La chose à propos de l'utilisation de Google Apis et KML est que vous devez avoir ce KML sur une URL publique où TOUT LE MONDE peut le voir. Si ce n'est pas un problème, vous pouvez peut-être l'essayer. En effet, Google absorbe ce KML dans leurs serveurs et le renvoie à l'API. Pour ces deux raisons, je ne peux pas utiliser l'API Google Maps en raison de la sensibilité de certains projets.
CaptDragon
Vous pouvez limiter l'accès à votre URL KML publique pour autoriser uniquement un agent utilisateur qui présente la chaîne d'analyseur Google KML.
Sarge
3

L'approche principale ici consiste à séparer la pixellisation de l'interaction. Une approche (dont je suis partiellement responsable) est UTFGrid , qui a été utilisée par NPR, etc. et est intégrée à TileMill et Mapnik . Il est également utilisé par CartoDB et Google Maps utilise une approche similaire pour Fusion Tables.

La planète protégée utilise également des tuiles raster (par exemple, celle-ci:) http://184.73.201.235/blue/8/78/93et a un serveur en direct derrière elle pour les requêtes basées sur des points (par exemple, celle-ci ).

Re: CaptDragon: aucun WFS ou KML n'est impliqué.

WMS et WFS ne vous fourniront pas des performances suffisamment bonnes pour un site public. La stratégie BBOX ne fonctionnera pas si vous laissez les utilisateurs zoomer.

tmcw
la source
FYI: Vous pouvez mettre en cache un service raster WMS qui vous donnera des tuiles.
CaptDragon
1
Oui, mais ce n'est pas le problème principal ici, c'est l'interactivité. Vous ne pouvez pas mettre en cache le fonctionnement de WFS / WMS GetFeature car ils ne sont pas conçus pour être mis en cache par mosaïque.
tmcw
Je mets en cache mes résultats CSW, WFS et WMS GetFeature, GetRecord, etc. tout le temps. Ce ne sont que des normes de format pour l'interopérabilité et ne dictent pas où la source, qu'elle soit mise en cache ou non, est stockée.
CaptDragon
Une demande WFS GetFeature typique est une demande pour une seule coordonnée; un cache pour cette demande n'est utile que pour les correspondances exactes - qui sont rares en termes d'interaction avec l'utilisateur. Des alternatives comme les tuiles de cache UTFGrid de données et peuvent remplir le cache de manière optimiste, contrairement à un cache pour potentiellement des millions de coordonnées uniques. De cette façon, la norme dicte sa compatibilité avec le cache.
tmcw
Wow- Merci pour toute l'aide. Étant donné que j'utilise OpenLayers et que ma carte est en 4326 (ce qui n'est pas pris en charge par TileMill), recommanderiez-vous CartoDB comme moyen de stocker et d'accéder à mes données?
KyleK