استفاده از type های geometric در سیمفونی(polygon)

با سلام و وقت بخیردر این پست میخوام در مورد یکی از نوع های geometric به نام polygon صحبت کنم.چند وقت پیش تو یک پروژه ای که مربوط به مختصات جغرافیایی بود و در این پروژه قرار بود که کاربر با موبایل مختصات زمینی و ثبت کنه به اصطلاح نقطه زنی کنه و به صورت Polygon بفرسته و ما هم در دیتابیس ذخیره کنیم کار میکردم.خودم قبلا تجربه کار با type های geometric و نداشتم و با جستجوهای که انجام دادم با یه پکیج آشنا شدم که برای doctrine هست و اسمش alexandret/doctrine2-spatial هست آشنا شدم که نوع های geometric رو هندل میکنه.این پکیج و نصب کردم و ازش استفاده کردم،دیتابیس من MySQL بود و مختصاتی و که وارد میکردم در دیتابیس ذخیره میکرد ولی مشکلی که وجود داشت شمای نقشه رو نمایش نمیداد و فقط نقطه های که زده بودم را رسم میکرد. وقتی ما از نوع polygon استفاده میکنیم همراه با lat , long های که میفرستیم یه srid و هم باید بفرستیم که یک کد جنرال هست که همیشه باید فرستاده بشه، این کد در MySql به صورت null ذخیره میشد و این مشکل را با سوئیچ دیتابیس به سمت PostgreSQL حل کردم.حالا بریم ببینیم به چه صورت میتوانیم از این پکیج استفاده کنیم.1- نصببرای نصب پکیج کافیست پکیج alexandret / spatial2-doctrine را در composer.json خود اضافه کنید$ composer require alexandret/doctrine2-spatialاگر از composer نمیخواهید استفاده کنید می توانید با کلیک به روی لینک این پکیج و دانلود کنید.2- پیکره بندی برای پیکره بندی Doctrine spatial extension در سیمفونی فقط کافیست فایل config/doctrine.yaml خود را ویرایش کنیم.انواع هندسی خود را وارد میکنیم، میبینیم type های دیگری هم وجود دارد، ما در این پست در مورد نوع polygon صحبت میکنیم.doctrine: dbal: types: geometry: CrEOF\Spatial\DBAL\Types\GeometryType point: CrEOF\Spatial\DBAL\Types\Geometry\PointType polygon: CrEOF\Spatial\DBAL\Types\Geometry\PolygonType linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType3- در مرحله بعد کافیست نوع polygon رو به موجودیت خود اضافه کنیمnamespace App\Entity; use CrEOF\Spatial\PHP\Types\Geometry\Polygon; use Doctrine\ORM\Mapping as ORM; class PolygonEntity{ /** * @var int * @Id * @GeneratedValue(strategy=&quotAUTO&quot) * @Column(type=&quotinteger&quot) */ protected $id; /** * @var Polygon * * @Column(type=&quotpolygon&quot, nullable=true) */ protected $polygon; public function getId() { return $this->id; } /** * Get polygon. * * @return Polygon */ public function getPolygon() { return $this->polygon; } /** * Set polygon. * * @param Polygon $polygon polygon to set * * @return self */ public function setPolygon(Polygon $polygon) { $this->polygon = $polygon; return $this; }} }4- بعد از اینکه مدل خود را ایجاد کردید migration خود را ایجاد میکنید و به دیتابیس ارسال میکنید5- یک نمونه از ریکوئست ای که به صورت رست ایجاد کردم و ایجا میفرستم که با هم ببینیم.{ &quotpolygon&quot: { &quotrings&quot: [ [ [ 51.337116612000045, 35.700401726000052 ], [ 51.337528042000031, 35.700363758000037 ], [ 51.337433070000031, 35.700090746000058 ], [ 51.337126481000041, 35.70009549100007 ], [ 51.337116612000045, 35.700401726000052 ] ] ], &quotsrid&quot: 4326 } }این مختصاتی که وارد کردم مختصات ناحیه ای در میدان آزادی هست.در polygon نقطه شروع و پایان باید یکی باشد.همیشه مقدار srid برابر با 4326 باید باشد که به صورت جنرال استممنون که تا اینجا همراهم بودید و امیدوارم که مفید واقع شده باشد.با تشکر امیر سلخوری هستم توسعه دهنده.01000001011011010110100101110010001000000101001101100001011011000110101101101000011011110111001001101001