انجمن تخصصی جی.آی.اس (GIS)

نسخه‌ی کامل: نزدیکترین خط به نقطه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
یک لایه از نوع line دارم و میخواه نزدیکترین خط به یک نقطه که به صورت دستی وارد میشه رو با spacial با استفاده از بانک postgresql بدست بیارم.
یه query بدست آوردم ولی خطا میده اگر لطف کنید کمک کنید ممنون میشم. 
این اون query هست
SELECT name,ST_Distance(r.geom,ST_SetSRID(ST_MakePoint(lon, lat),4326)) FROM roads r ORDER BY 2 ASC LIMIT 1;
lon , lat مربوط به یک نقطه میباشند
1- یک بار به جای اون lon و lat مقدار بگذارید ببینید کار میکنه؟
2- دیتای شما در سیستم WGS84 هست که گذاشتین 4326؟
3- مطمئنید فیلد مکانی شما geom هست؟

ضمن این که این کوئری خط رو به شما نمیده. فاصله نزدیکترین خط رو به شما میده، نه خود خط رو.
 
سلام
من sql رو به این شکل نوشتم
SELECT r.*,ST_Distance(r.geom,ST_SetSRID(ST_MakePoint( 51.79544, 32.83006),4326)) FROM road r ORDER BY 2 ASC LIMIT 100;
نقشه ها همه wgs84 هستند ولی این خطا رو میده

ERROR:  Operation on two GEOMETRIES with different SRIDs


********** Error **********

ERROR: Operation on two GEOMETRIES with different SRIDs
SQL state: XX000

اول این که ایراد از کجاست ؟ دوم این که من میخوام نزدیکترین خط به نقطه رو در یک لایه نقشه از نوع line پیدا کنم آیا query من صحیح هست ؟
1. ایرادش که معلومه. SRID مخفف System Reference Id هست. یعنی دو تا ژئومتری ورودی به فانکشن ST_Distance سیستم مختصات یکسانی ندارند. به احتمال زیاد موقع وارد کردن دیتاتون به دیتابیس سیستم مختصاتی رو واسش وارد نکردین.

2- قبلا جواب دادم. پست بالا رو ببینید. این کوئری فاصله نزدیکترین خط رو میده و اسمش (در صورتی که فیلد name داشته باشین). به جای فیلد name اسم فیلد مکانی تون رو بذارین.

 
لینک مرجع