Suite

Récupérer les données postgis via php json et passer à la carte du dépliant

Récupérer les données postgis via php json et passer à la carte du dépliant


Je suis nouveau dans ce domaine et j'essaie d'explorer un peu les brochures et geojson. S'il vous plait, j'ai besoin de votre aide avec ceci.

Ceci est ma page php que j'utilise pour récupérer les données de PostGIS. (les données se sont ouvertes avec succès dans le navigateur)

$sql = "SELECT *, (ST_AsGeoJSON(geom)) AS Geojson FROM public.village_boundary_metro" ; $rs = pg_query($dbconn4, $sql); if (!$rs) { echo "Une erreur SQL s'est produite.
"; sortir; } $output ="; $rowOutput ="; while ($row = pg_fetch_assoc($rs)) { $rowOutput = (strlen($rowOutput) > 0 ? ',' :") . '{"type": "Feature", "geometry": ' . $row[ 'geojson'] .', "properties": {'; $props ="; $id ="; foreach ($row as $key => $val) { if ($key != "geojson") { $props .= (strlen($props) > 0 ? ',' :") . '"' . $key . '":"' . escapeJsonString($val) . '"'; } if ($key == "id") { $id .= ',"id":"' . escapeJsonString($val) . '"'; } } $rowOutput .= $props . '}'; $rowOutput .= $id; $rowOutput .= '}'; $output .= $rowOutput; } $output = '{ "type": "FeatureCollection", "features": [ ' . $sortie . ' ]}'; echo json_encode($output);

Et maintenant, j'essaie d'extraire ces données résultantes via Ajax en tant que couche geojson sur une carte alimentée par un dépliant. (le code ajax suit)

$.ajax({ type : "GET", url : 'geojson_entry_postgis.php', data : data, dataType : 'json', success : function (data) { var geojson = new L.geoJson(data).addTo(map ); }})

J'ai aussi essayé de cette façon…

var geojson = L.geojson('geojson_entry_postgis.php?geotable=village_boundary_metro&geomfield=geom', { style : {"color":"#ff7800","weight":2}, maxZoom : 6, onEachFeature : onEachFeature }).addTo (carte);

Cependant, les données extraites de postgis ne s'affichent pas en tant que couche geojson sur la carte comme prévu. S'il vous plaît laissez-moi savoir où je vais mal et suis-je en train de suivre le bon processus ??

P.S. La fonction Ajax fonctionne bien dans d'autres exemples.


Si vous obtenez des résultats à partir de votre code php, copiez ce résultat json dans le testeur sur geojson.io ou geojsonlint.com pour vérifier le format, une fois que vous avez confirmé les données, examinez de près les valeurs de "coordonnées", parfois PostGIS apporte cela données dans un format que le dépliant ne peut pas dessiner. Si les coordonnées sont correctes, alors quelque chose dans le code html du code est le problème. Un problème commun est la portée des variables si vous en créez une dans une fonction, y chargez les données de réponse et essayez de gérer cette couche à partir d'un contrôle de brochure, alors elle ne sera pas affichée. Dans ton code :

success : function (data) { var geojson = new L.geoJson(data).addTo(map); }

ce sera ajouter le calque mais il ne sera pas contrôlé par L.LayerControl.

je recommanderai :

succès : fonction (données) {var geojson = new L.geoJson(données);}

et en dehors de la fonction ajax :

$.ajax({… }}); geojson.addTo(carte);

Analyser Javascript récupérer en PHP

C'est parce que vous ne définissez pas le corps de la demande au format correct.

https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#Parameters

body : tout corps que vous souhaitez ajouter à votre demande : il peut s'agir d'un objet Blob, BufferSource, FormData, URLSearchParams ou USVString. Notez qu'une requête utilisant la méthode GET ou HEAD ne peut pas avoir de corps.

Ainsi, définir body sur une chaîne JSON fait que l'en-tête de type de contenu est text/plain . Même si vous définissez la requête Content-Type sur application/json, cela n'aurait pas d'importance car PHP ne sait pas par défaut comment analyser les charges utiles des requêtes JSON entrantes (à moins qu'elles n'aient été récemment ajoutées à PHP 7).

Vous pouvez faire plusieurs choses côté client

Créez un objet FormData à partir de votre objet et utilisez-le comme corps, et un type de contenu multipart/form sera utilisé

Créez un objet URLSearchParams qui définira le type de contenu sur application/x-www-form-urlencoded . Remarque : URLSearchParams n'est pas largement pris en charge

Créez une chaîne de requête (c'est-à-dire a=hello&b=world ) et utilisez un objet Headers pour définir Content-Type sur application/x-form-urlencoded

Si vous souhaitez toujours envoyer une charge utile JSON au lieu de faire ce qui précède, vous le pouvez, mais vous devrez lire l'entrée de la requête brute, puis utiliser json_decode pour accéder aux données.


Le projet GeoPHP a déclaré qu'il avait l'intention de restreindre son projet aux données de géométrie pure. En d'autres termes, aucune donnée sur les caractéristiques telle que celle que vous pourriez trouver dans un fichier GPX.

GeoPHPwithFeatures est un fork du projet populaire GeoPHP qui ajoute des métadonnées de fonctionnalités aux géométries.

L'objectif principal de ce fork est d'ajouter la prise en charge des données d'entités de fichier GPX et de les convertir vers et depuis GeoJSON, ce qui facilite la gestion des types de données d'entités que vous pourriez trouver dans un fichier GPX généré par GPS et de les rendre sur une carte LeafLet. J'avais besoin de cette capacité pour la prochaine version des cartes sur mon site : miles-by-motorcycle.com

Les autres adaptateurs (KML, etc.) ignorent simplement les métadonnées au moment d'écrire ces lignes.

Les fichiers GPX avec des métadonnées d'extension peuvent être lus et écrits. Ils peuvent également être convertis au format GeoJSON où les géométries avec métadonnées sont converties en objets GeoJSON Features avec une propriété properties qui inclut une copie textuelle des extensions de métadonnées GPX. La spécification GeoJSON n'a pas d'opinion sur la façon dont la propriété properties est formatée, j'ai donc choisi d'imiter simplement la structure des métadonnées trouvée dans les fichiers GPX en gardant tous les noms d'extension identiques (par exemple, gpxx:RouteExtension de Garmin, gpxx:WaypointExtension, et al.)

  • Une propriété properties est incluse au niveau supérieur FeaturesCollection, en violation de la norme.
  • Un objet de métadonnées est inclus dans le type de point LineString pour représenter l'altitude, l'heure et d'autres métadonnées (du fichier GPX) également en violation de la norme.
  • Les trkseg GPX dans un trk donné sont fusionnés en un seul trkseg.

Pour un exemple de fichier GPX généré par Garmin Zumo 550 converti en GeoJSON, consultez les répertoires tests/input/gpx et tests/input/json.

Un simple outil de ligne de commande, bin/geo_convert.php, est inclus pour convertir les fichiers manuellement. Vous pouvez trouver xmllint et json_pp utiles pour formater la sortie afin qu'elle soit lisible par l'homme. Pour un exemple essayez :

$ cd geoPHPwithFeatures/bin $ php geo_convert.php --input-path=../test/input/gpx/2_test.gpx --input-format=gpx --output-path=test.json --output-format= geojson

Pour la documentation, veuillez vous référer au projet GeoPHP.

Les seuls changements publics sont l'ajout d'un paramètre « metadata » supplémentaire à tous les constructeurs de géométrie en plus de setMetaData() et getMetaData(). Dans tous les cas, ils prennent simplement un tableau associatif arbitraire. Tout le reste doit être rétrocompatible avec le projet GeoPHP principal.

libxerces-c-samples - nécessaire pour valider les fichiers GPX. Voir http://www.topografix.com/gpx_validation.asp (SAXCount)

GeoPHP est une bibliothèque PHP native open source pour effectuer des opérations de géométrie. Il est entièrement écrit en PHP et peut donc s'exécuter sur des hôtes mutualisés. Il peut lire et écrire une grande variété de formats : WKT (y compris EWKT), WKB (y compris EWKB), GeoJSON, KML, GPX et GeoRSS. Il fonctionne avec toutes les géométries Simple-Feature (Point, LineString, Polygon, GeometryCollection, etc.) et peut être utilisé pour obtenir les centroïdes, les cadres de délimitation, la surface et une grande variété d'autres informations utiles.

geoPHP encapsule également utilement l'extension php GEOS afin que les applications puissent obtenir une augmentation transparente des performances lorsque GEOS est installé sur le serveur. Lorsque GEOS est installé, geoPHP devient également entièrement conforme à la norme de mise en œuvre OpenGIS® pour les informations géographiques. Avec GEOS, vous obtenez l'ensemble complet des fonctions openGIS en PHP comme Union, IsWithin, Touches, etc. Cela signifie que les applications bénéficient d'un "ensemble de base" utile d'opérations géométriques qui fonctionnent dans tous les environnements, opérations pour les environnements sur lesquels GEOS est installé.

Voir la section « démarrage » ci-dessous pour des références et des exemples de tout ce que geoPHP peut faire.

Ce projet est actuellement à la recherche de co-mainteneurs. Si vous pensez pouvoir m'aider, n'hésitez pas à m'envoyer un message. Les forks sont également les bienvenus, veuillez émettre des demandes de tirage et je les fusionnerai dans la branche principale.

  • La dernière version stable peut toujours être téléchargée sur : https://phayes.github.io/bin/current/geoPHP/geoPHP.tar.gz
  • Lisez la référence de l'API sur : https://geophp.net/api.html
  • Exemples
    • Utilisation de geoPHP comme convertisseur de format SIG : http://github.com/phayes/geoPHP/wiki/Example-format-converter
    • En savoir plus sur l'intégration de GEOS sur : https://geophp.net/geos.html

    La prise en charge de Well Known Text (WKT) et Well Known Binary (WKB) est idéale pour l'intégration avec la capacité spatiale de MySQL ou PostGIS. Une fois que vous avez SÉLECTIONNÉ vos données avec 'AsText('geo_field')' ou 'AsBinary('geo_field')' , vous pouvez les mettre directement dans geoPHP (peut être wkt ou wkb, mais doit être identique à la façon dont vous l'avez extrait de votre base de données):

    Vous pouvez collecter plusieurs géométries en une seule (notez que vous devez utiliser wkt pour cela) :

    L'appel à get components renvoie les sous-géométries d'une géométrie sous forme de tableau.

    Une alternative consiste à utiliser la méthode asArray(). En utilisant la collection de géométrie ci-dessus de deux chaînes de lignes,

    Il est clair qu'une analyse plus complexe est possible.

    geoPHP, grâce à son adaptateur EWKB, a une bonne intégration avec postGIS. Voici un exemple de lecture et d'écriture de géométries postGIS

    Mainteneur GeoPHPwithFeatures : Yermo Lamers https://github.com/yermo

    Mainteneur GeoPHP : Patrick Hayes

    • Recherche GeoMemes (http://www.geomemes.com)
    • HighWire Press (http://www.highwire.org) et GeoScienceWorld (http://www.geoscienceworld.org)
    • Arnaud Renevier (gisconverter.php) https://github.com/arenevier/gisconverter.php
    • Dave Tarc https://github.com/dtarc
    • Elliott Hunston (documentation) https://github.com/ejh

    Cette bibliothèque est open source et sous double licence sous la licence BSD modifiée et la GPLv2. L'une ou l'autre licence peut être utilisée à votre convenance.


    5 réponses 5

    Je n'ai jamais utilisé php, donc je ne sais pas si c'est de là que vient ton problème. Comparez votre code à celui-ci, cela a fonctionné pour moi, peut-être que votre erreur est dans le javascript.

    Je viens d'essayer votre code (chri_chri) .

    J'ai essayé de charger une image mais je me trompe. Je suis aussi maintenant à openlayers

    Ce que je commence, c'est de charger une carte de plan d'étage et d'essayer de la mettre à l'échelle.

    vous pouvez consulter cet exemple postgis to geojson php clarifiant comment utiliser un script php pour obtenir les données geojson via la base de données postgis.

    et comme vous l'avez fait dans l'url de votre couche geojson, vous transmettez l'url de votre script php. J'espère que ça aide

    J'utilise PostGis avec Openlayers 3/4 sans GeoServer. La façon dont je choisis est d'obtenir geojson à partir d'une base de données Postgis via une fonction que j'appelle, qui renvoie les données et les styles selon mes paramètres.

    En Javascript, je définis les données et le style => la fonction Javascript appelle un script php via GET pour récupérer les données de Postgis => la fonction stylise les données à restituer dans Openlayers 3. L'ensemble des scripts peut être vu dans Y a-t-il un moyen simple de utiliser Postgis-geojson dans Openlayers 3 ?

    Sachez que la solution proposée n'est pas sécurisée, car les chaînes GET pourraient être manipulées (sql-injections). J'utilise un appel via https et le script php côté serveur vérifie si une SESSION est définie. Les scripts ne peuvent donc pas être exécutés sans être connecté. Nous l'utilisons dans un très petit groupe, mais ce n'est peut-être pas une bonne idée de l'utiliser dans un environnement où de nombreuses personnes accèdent aux données.


    Vulnérabilité d'injection d'URL

    Je suis occupé avec un pentest et j'ai trouvé quelque chose qui m'a fait me demander s'il serait exploitable. Je ne suis actuellement pas en mesure de l'exploiter, mais je voulais m'en assurer. Aussi, je suis curieux de savoir pourquoi l'application/le serveur se comporte comme il le fait.

    Voici la fonctionnalité :

    • L'application vous permet de télécharger des images sur le cloud et renvoie une URL où l'image est alors
    • L'application envoie ensuite cette URL de retour au serveur où elle est stockée afin que d'autres personnes trouvent les images via l'URL
    • Sur la base de certaines parties de l'URL, les utilisateurs récupèrent une URL différente dans un document JSON avec toutes les images :

    C'est la « vulnérabilité » :

    Changer l'URL comme suit :

    l'utilisateur récupère alors quelque chose dans le document JSON sous la forme de :

    Ce que je m'attendrais à ce que l'application essaie simplement d'obtenir, mais l'application fait en quelque sorte une requête GET pour :

    https://RootServerOfApplication.com/NameOfApplication/^^L'URL ci-dessus avec https au lieu de http%73^^

    Comme il s'agit d'un test en cours, je ne peux pas vraiment entrer dans les détails (confidentialité et tout !). J'espère donc que cela fournit suffisamment d'informations.

    ÉDITER: Ce que j'ai omis de mentionner ci-dessus, c'est que lorsque je falsifie le JSON entrant et que je mets simplement n'importe quelle URL avec HTTPS dans la chaîne JSON, l'application essaie d'obtenir cette URL précise. Je change donc le JSON en quelque chose comme ceci :

    L'application essaie en fait d'OBTENIR shell.exe à partir de mon serveur. Cela ne fonctionne pas lorsque je l'essaye avec %73 au lieu d'un s.

    Edit2 : Ce que j'ai également omis de mentionner, c'est qu'il s'agit d'une application Android.


    Superpositions et contrôles

    Nous vous avons mis au courant de toutes les bases dont vous pourriez avoir besoin pour implémenter votre propre carte interactive en utilisant l'API de carte interactive de MapmyIndia.s. Voyons maintenant tout ce que vous pouvez ajouter à votre carte interactive pour la rendre adaptée à vos cas d'utilisation.

    Marqueurs

    Les marqueurs sont un moyen sans effort de pointer vers un emplacement, donc pour y aller directement, vous pouvez aller de l'avant et ajouter des marqueurs que nous fournissons prêts à l'emploi, mais juste au cas où vous voudriez ajouter le vôtre, nous avons cela pour vous en tant que bien. Il existe 3 catégories principales de marqueurs que vous pouvez ajouter à savoir,
    - Marqueur d'actions: Celui que vous sortez de la boîte en utilisant notre API de cartes interactives et vous pouvez choisir parmi de nombreux choix.
    - Marqueur personnalisé: Au cas où vous voudriez fournir vos propres marqueurs, nous nous en chargeons également pour vous.
    - Marqueur HTML: Au cas où vous ne voudriez pas ajouter une image, vous pouvez utiliser HTML pour créer un marqueur, puis le tracer sur la carte également.

    Tout d'abord, voyons comment ajouter un marqueur de stock, puis nous allons construire à partir de là. Ainsi, en tirant parti des événements décrits ci-dessus, essayons de créer un marqueur au dblclick événement de la carte, commençons :

    Donc, après l'initialisation de la carte comme indiqué ci-dessus, écrivez une fonction en utilisant les directives décrites ci-dessus pour ajouter un seul marqueur, quelque chose comme ci-dessous :

    Maintenant que vous avez écrit le code JavaScript pour ajouter un nouveau marqueur, appelons cette fonction dans le dblclick événement de la carte, quelque chose comme ci-dessous :

    où,
    marker est une variable globale définie dans le JavaScript comme marqueur var = [ ]

    Aussi, mk.bindPopup(titre) du code ci-dessus est pour la fenêtre contextuelle ou la fenêtre d'information, nous en parlerons dans un instant, d'abord concluons cette section

    Veuillez noter: L'image montre un marqueur par défaut avec indexation, L'indexation est réalisée via le CSS vous pouvez éditer le CSS pour rendre votre marqueur gel avec votre UI. Nous ne couvrons que les bases ici, vous devrez donc écrire votre propre logique d'indexation pour référence. Veuillez vous référer à l'exemple de code fourni dans les liens ci-dessus, mais dans le CSS, vous pouvez ajouter quelque chose comme ci-dessous :

    Maintenant, avant d'aller de l'avant, voyons rapidement comment fournir votre propre marqueur personnalisé (votre propre image).
    Pour ce faire, vous pouvez modifier le ajouter un marqueur() pour prendre un emplacement d'image personnalisé au lieu de l'emplacement par défaut comme indiqué ci-dessous :

    Remarque : Nous avons ajouté le champ d'icône dans les paramètres et l'avons transmis au L.Marqueur
    Vous devez maintenant modifier l'événement dblclick comme ci-dessous pour transmettre un marqueur personnalisé :

    Veuillez noter: Nous avons examiné quelques exemples de chemins que vous pouvez créer vous-même.

    Maintenant que vous avez une compréhension de base des marqueurs, des fonctions et des événements, parlons des fenêtres d'informations ou des fenêtres contextuelles.

    Fenêtres d'informations

    Les fenêtres d'informations sont un moyen pratique d'afficher des données sur un marqueur ou, en termes simples, ce que ce marqueur représente. Le comportement natif d'un utilisateur pour connaître n'importe quel marqueur est d'essayer de cliquer dessus pour savoir de quoi il s'agit et d'afficher une fenêtre d'informations serait le moyen de s'y prendre :

    Veuillez noter: La carte interactive MapmyIndia prend en charge une fenêtre d'informations par défaut que vous pouvez exploiter, mais nous souhaitons que vous ayez la possibilité de personnaliser votre fenêtre d'informations pour qu'elle s'adapte à votre interface utilisateur et que vous puissiez le faire dans le CSS.

    Rappelles toi mk.bindPopup(titre) de la section d'ajout d'un marqueur ? Eh bien, cet extrait de code rapide lie votre fenêtre d'informations à votre marqueur. Ainsi, lorsque vous cliquez sur le marqueur, la fenêtre d'informations s'ouvre.

    Nous allons passer en revue les extraits de code ici et pour un échantillon rapide ou une démo, vous pouvez suivre avec les liens en haut. allons droit au but alors.

    Vous pouvez déclarer une fenêtre d'informations dans votre CSS et écrire une fonction rapide pour générer des données dans cette fenêtre d'informations et, sur un événement de clic de marqueur, ouvrez simplement cette fenêtre d'informations. Cela semble simple ? regardons,

    Le code ci-dessus génère simplement une fenêtre d'informations basée sur le titre et le contenu qui lui sont fournis en poussant ces données vers le CSS. La fenêtre d'information est définie dans le CSS comme ci-dessous :

    Veuillez noter: Ce qui précède est le CSS pour la fenêtre d'informations personnalisée que vous pouvez facilement personnaliser en lui donnant votre propre CSS. La fenêtre d'informations par défaut n'a pas besoin de CSS, vous pouvez jeter un coup d'œil à la fenêtre d'informations par défaut à partir de l'exemple de code dans les liens ci-dessus.

    Maintenant que nous avons couvert le CSS et la façon dont la fenêtre d'informations est générée, voyons comment cela change le code où nous définissons le marqueur. Rappelez-vous le code de l'ajout d'un segment de marqueur ? Et mk.bindPopup(titre) extrait de code?

    Nous pouvons maintenant remplacer cela par le code ci-dessous :

    et dans l'événement mk.click, ajoutez le code ci-dessous :

    Cela ouvrira la fenêtre d'information attachée au marqueur.

    Dans cette section, nous avons examiné ce que sont les fenêtres d'informations, comment pouvons-nous leur fournir notre propre style, comment pouvons-nous modifier le code d'ajout d'un marqueur existant pour qu'il fonctionne également avec une fenêtre d'informations et enfin comment ouvrir une fenêtre d'informations en cliquant un événement.

    Les fenêtres d'informations ne sont qu'une petite partie de ce que nous pouvons utiliser pour afficher nos données dans un scénario de carte, nous traitons plus d'itinéraires que de données textuelles. Jetons un coup d'œil aux polylignes qui nous aident à mieux représenter les données de l'itinéraire.

    Polylignes

    Les polylignes sont un moyen de montrer le mouvement ou le transit sur une carte. Chez MapmyIndia, nous comprenons les façons dont vous pouvez tirer parti des fonctionnalités offertes par une carte et l'une d'entre elles est une polyligne. Alors, allons-y.

    Les polylignes sont des lignes continues constituées d'un ou plusieurs segments de ligne (de préférence un géopath). Pour ajouter une polyligne, initialisez la carte comme indiqué dans les sections précédentes, puis créez un ensemble de données. Qu'est-ce qu'un ensemble de données ? L'ensemble de données est la collection de points (latitude et longitude) sur lesquels vous souhaitez que la polyligne soit dessinée. regardons.

    Maintenant que nous avons un petit ensemble de données prêt, sortons la polyligne prête.

    générons maintenant la polyligne

    Eh bien, dans les trois extraits de code ci-dessus, nous avons généré un ensemble de données pour la polyligne, puis défini les perspectives de base de la polyligne à l'aide de polylineParam, puis généré une polyligne qui prend en compte l'ensemble de données et les perspectives de base de la polyligne. Maintenant, nous allons simplement l'ajouter à notre carte.

    et maintenant vous avez une carte de travail qui montre le transit à l'aide de polylignes.

    Veuillez noter: Nous avons codé en dur l'ensemble de données pour la polyligne, mais dans des cas réels, vous devrez obtenir l'ensemble de données à la volée ou à partir d'un service, puis vous pourrez tirer parti des événements et des fonctions que nous avons appris pour tracer le polyligne. En outre, il s'agit d'une implémentation très basique d'une polyligne dont vous pourriez avoir besoin pour embellir votre polyligne ou ajouter des transitions pour que votre interface utilisateur soit merveilleuse. Consultez la section des plug-ins pour découvrir les plug-ins que nous proposons pour faire ressortir votre interface utilisateur.

    La polyligne n'est qu'un début, mais vous devrez parfois marquer un territoire pour présenter correctement vos informations. Dans de tels cas, une polyligne peut ne pas convenir parfaitement, mais les polygones et les cercles seront le choix approprié. jetons un coup d'oeil à eux.

    Polygones

    Les polygones sont une façon de montrer un territoire. Dans les cas où vous souhaitez présenter des données sur une zone, les polygones sont votre meilleur choix. Vous pouvez également les utiliser pour afficher les géozones.

    Pour commencer avec les polygones, initialisez la carte comme indiqué dans les sections ci-dessus, puis dans votre code JavaScript, suivez les extraits de code ci-dessous.

    C'est très similaire à la génération d'une polyligne, les étapes de base restent les mêmes, créer un ensemble de données, générer un polygone et l'ajouter à la carte. voyons comment :

    Le code ci-dessus crée un ensemble de données de tous les points que le polygone doit marquer.

    Ainsi, à partir du code ci-dessus, nous avons compris comment utiliser des commandes, des événements et des fonctions de base prêts à l'emploi pour ajouter un polygone à la carte. Mais que se passe-t-il si nous voulons que l'utilisateur interagisse avec la carte et dessine lui-même un polygone ? Parce que dans des cas réels, nous obtiendrions soit des données de polygone d'un service, soit un utilisateur les dessinerait pour informer de sa zone d'intérêt.

    Pour s'adapter à ce cas, nous proposons un contrôle de tiroir de polygone hors de la boîte à travers laquelle l'utilisateur peut interagir et dessiner un polygone pour lui-même. Voyons comment utiliser ce tiroir de polygones.

    Veuillez noter: Vous pouvez voir une implémentation détaillée du contrôle et de ses CSS avec HTML dans l'exemple de code que nous fournissons à partir du lien en haut ou si vous voulez le voir en action, vous pouvez le faire à partir du lien de démonstration en direct de haut.

    Maintenant que nous avons couvert les polygones, jetons un coup d'œil à Cercles qui offrent une autre façon de mettre en valeur le territoire.

    Cercles

    Les cercles sont un moyen de marquer un territoire sans trop d'interaction de la part de l'utilisateur. Un cercle n'a que deux valeurs importantes :

    • Le point central du cercle (dans ce cas, ce sera une latitude avec une longitude).
    • Le rayon du cercle.

    Avec les deux valeurs, vous pouvez facilement définir une zone d'intérêt rapide sur une carte. Alors, jetons un coup d'œil rapide. Donc, dans votre code JavaScript, ajoutez une fonction qui ressemble à quelque chose comme ci-dessous :

    Dans le code ci-dessus, nous définissons simplement le rayon et le point central et nous définissons les propriétés du diamètre. Ensuite, nous ajoutons simplement le Diamètre à la carte.

    Veuillez noter: la map.fitBounds(currentDiameter.getBounds()) l'extrait de code garantit simplement que la carte est étendue à la forme circulaire. Vous vous souviendrez peut-être des getBounds() des sections de fonctions dont nous avons parlé ci-dessus.

    Et c'est tout ce qu'il y a à faire. Vous disposez de toutes les bases dont vous avez besoin pour commencer et vous débrouiller pour créer votre propre implémentation en tirant parti de l'API de cartes interactives de MapmyIndia.s.

    Ce n'est pas sorcier, non ?
    Ce ne sont que les bases de tous, mais pour améliorer votre expérience, vous ne voudrez peut-être pas les bases. Jetons un coup d'œil aux plug-ins que nous proposons pour que vos utilisateurs se sentent incroyables et que cela vous profite à son tour.


    Programme qui filtre les données JSON en fonction de la sélection de l'utilisateur

    J'ai créé un programme de base utilisant AngularJS qui affiche les données d'un fichier JSON et les filtre en fonction de la sélection de l'utilisateur (en particulier les cartes de chimie FIFA 15).

    J'ai fait beaucoup de travail CSS principalement pour me tester car je l'ai à peine utilisé. J'ai fait un travail (minimal) pour que certains aspects répondent à des écrans de différentes tailles.

    Mes questions pour l'amélioration sont les suivantes :

    • Quels aspects de ce code ne suivent pas les meilleures pratiques courantes ?
    • Avez-vous remarqué des problèmes de mise en page dans le CSS ? Si oui, comment pourrais-je les améliorer ?
    • Quels aspects de ce code feriez-vous d'une manière complètement différente ?
    • Que pouvez-vous suggérer qui pourrait améliorer ce programme?


    Comment effectuer une requête sur une liste dynamique de tables ?

    J'ai une base de données nommée (conntrack) avec un nombre inconnu de tables. J'ai une table statique "tabidx" qui a une colonne "date".

    La table suivante est statique et son nom est tabidx qui fournit une référence à d'autres tables :

    Voici des exemples des tables référencées dans 'tabidx' 'date' :

    Je voudrais lister au gestionnaire les tables disponibles qui existent dans tabidx et compter le nombre d'utilisateurs que nous avons dans toutes les tables s'ils sont référencés dans tabidx. Donc si le gestionnaire demande :

    Je voudrais que la sortie corresponde aux lignes mysql conformément à la demande ci-dessus. Par exemple:

    Comment puis-je lister ou sélectionner toutes les tables trouvées dans le tabidx .? Je ne sais pas comment utiliser des instructions préparées dans mysql.

    Je sais que la première étape devrait être de lister les tables disponibles. Que faire si quelqu'un veut demander les tables disponibles qui ont un utilisateur spécifique comme "L002000" , alors nous ne devrions pas du tout répertorier les tables car nos tables dynamiques n'ont pas ce nom d'utilisateur .

    J'ai réussi à créer une solution temporaire, mais ce que je sais, c'est que cette solution est si mauvaise et je ne suis pas celui qui a créé cette structure. Nous pourrions atteindre jusqu'à 360 tables pendant un an.


    Couplage de la couche de service

    Je travaille sur l'écriture d'une couche de service pour un système de commande en php. C'est le scénario typique, vous avez une commande qui peut avoir plusieurs articles. Disons donc qu'une demande est reçue pour stocker un élément de ligne avec des images et des commentaires. Je pourrais recevoir une demande json telle que

    Mon idée était d'avoir une classe Service_LineItem_Bike qui sache comment prendre les données json et stocker une entité pour un vélo.

    Ma question est la suivante : la classe Service_LineItem doit maintenant récupérer les commentaires et les pièces jointes, et stocker les relations. Service_LineItem semble devoir interagir avec un Service_Comment et un Service_FileUpload . Les instances de ces deux autres services doivent-elles être instanciées et transmises au constructeur Service_LineItem, ou définies par les getters et les setters ? L'injection de dépendances semble être la bonne solution, permettre à un service d'accéder à un « assistant de récupération de service » semble erroné, et cela devrait rester au niveau de l'application.

    J'utilise Doctrine 2 comme ORM, et je peux techniquement écrire une requête dql dans Service_LineItem pour récupérer les commentaires et les téléchargements de fichiers nécessaires à l'association, mais cela semble avoir un couplage plus étroit, plutôt que de laisser cela à droite objet de service.


    PHP,geojson和openlayers

    Je suis resté complètement à travers les scripts avec openlayers. J'ai une base de données dans postgis avec des coordonnées et des valeurs de hauteur et même une colonne de géométrie pour chaque ligne. Je crée un formulaire avec un bouton d'envoi pour récupérer les données uniquement en fonction de la valeur saisie par l'utilisateur. Lorsque j'appuie sur le bouton d'envoi, le PHP obtient des données correctes et se transforme en format JSON que j'ai affiché comme résultat. Quelqu'un sait-il comment charger ces résultats dans la couche openlayers et afficher ces points ? C'est la page principale :

    Et la requête PHP ressemble à ça :

    À mon avis, cela devrait fonctionner, mais ce n'est pas du tout. Peut-être que quelqu'un a une idée de ce qui ne va pas. Merci pour vos suggestions, car j'en ai vraiment assez.

    5条 回答 默认 最新

    粉丝数 影响力 0

    Je n'ai jamais utilisé php, donc je ne sais pas si c'est de là que vient ton problème. Comparez votre code à celui-ci, cela a fonctionné pour moi, peut-être que votre erreur est dans le javascript.

    粉丝数 影响力 0

    Je viens d'essayer votre code (chri_chri) .

    J'ai essayé de charger une image mais je me trompe. Je suis aussi maintenant à openlayers

    Ce que je commence, c'est de charger une carte de plan d'étage et d'essayer de la mettre à l'échelle.

    粉丝数 影响力 0

    vous pouvez consulter cet exemple postgis to geojson php clarifiant comment utiliser un script php pour obtenir les données geojson via la base de données postgis.

    et comme vous l'avez fait dans l'url de votre couche geojson, vous transmettez l'url de votre script php. J'espère que ça aide

    粉丝数 影响力 0

    J'utilise PostGis avec Openlayers 3/4 sans GeoServer. La façon dont je choisis est d'obtenir geojson à partir d'une base de données Postgis via une fonction que j'appelle, qui renvoie les données et les styles selon mes paramètres.

    En Javascript, je définis les données et le style => La fonction Javascript appelle un script php via GET pour récupérer les données de Postgis => la fonction stylise les données à restituer dans Openlayers 3. L'ensemble des scripts peut être vu dans Y a-t-il un moyen simple de utiliser Postgis-geojson dans Openlayers 3 ?

    Sachez que la solution proposée n'est pas sécurisée, car les chaînes GET pourraient être manipulées (sql-injections). J'utilise un appel via https et le script php côté serveur vérifie si une SESSION est définie. Les scripts ne peuvent donc pas être exécutés sans être connecté. Nous l'utilisons dans un très petit groupe, mais ce n'est peut-être pas une bonne idée de l'utiliser dans un environnement où de nombreuses personnes accèdent aux données.


    Voir la vidéo: Postgresql: créer nouveau serveur, nouvelle base de données et ajouter lextension spatial Postgis