Ceci est un poste croix d'un courriel que j'ai envoyé à la liste de diffusion de PostGISDessiner une ligne PostGIS en utilisant la méthode Neighbour la plus proche
Jusqu'à présent, dans mon effort pour créer une ligne entre un point et son projeté emplacement sur une ligne a été longue mais je suis presque là. En date d'hier, et avant d'inclure une analyse du plus proche voisin, j'ai obtenu les résultats présentés dans cette image:
Comme vous pouvez le voir, chaque point en rose se connecte à tous les points prévus, alors que , Je veux seulement connecter chaque x rose à sa projection respective. Sur IRC, il a été recommandé d'utiliser BostonGIS's nearest neighbor method. J'ai entré la fonction à PostgreSQL et l'ai essayée sans succès comme indiqué ci-dessous. Je suppose que mon erreur est due au mauvais type de paramètre. J'ai joué avec ça, j'ai changé le type de colonnes en varchar, mais je n'arrive toujours pas à le faire fonctionner.
Des idées sur ce que je fais mal? des suggestions sur la façon de le réparer?
code:
-- this sql script creates a line table that connects points
-- convert multi lines into lines
CREATE TABLE exploded_roads AS
SELECT the_geom
FROM (
SELECT ST_GeometryN(
the_geom,
generate_series(1, ST_NumGeometries(the_geom)))
AS the_geom
FROM "StreetCenterLines"
)
AS foo;
-- Create line table that'll connect the centroids to the projected points on exploded lines
CREATE TABLE lines_from_centroids_to_roads (
the_geom geometry,
edge_id SERIAL
);
-- Populate Table
INSERT INTO lines_from_centroids_to_roads (the_geom)
SELECT
ST_MakeLine(
centroids.the_geom,
(pgis_fn_nn(centroids.the_geom, 1000000, 1,1000, 'exploded_roads' ,'true', 'gid',
ST_Line_Interpolate_Point(
exploded_roads.the_geom,
ST_Line_Locate_Point(
exploded_roads.the_geom,
centroids.the_geom
)
)
)).*
)
FROM exploded_roads, fred_city_o6_da_centroids centroids;
DROP TABLE exploded_roads;
erreur
NOTICE: CREATE TABLE will create implicit sequence "lines_from_centroids_to_roads_edge_id_seq" for serial column "lines_from_centroids_to_roads.edge_id"
ERROR: function pgis_fn_nn(geometry, integer, integer, integer, unknown, unknown, unknown, geometry) does not exist
LINE 28: (pgis_fn_nn(centroids.the_geom, 1000000, 1,1000, 'exploded...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
ERROR: function pgis_fn_nn(geometry, integer, integer, integer, unknown, unknown, unknown, geometry) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 584
Pourquoi utilisez-vous 'ST_Line_Interpolate_Point'? Ne devrait pas être l'emplacement du point sur la ligne être clair avec 'ST_Line_Locate_Point'? – Stophface