มากกว่า

Leaflet & Esri-Leaflet: วัตถุ JSON วาดไม่ถูกต้องเมื่อใช้ตัวกรอง 'ฟิลด์'

Leaflet & Esri-Leaflet: วัตถุ JSON วาดไม่ถูกต้องเมื่อใช้ตัวกรอง 'ฟิลด์'


ฉันกำลังทำงานกับ Leaflet 0.7.3 และ esri-leaflet beta.6 การใช้ L.esri.Layers.FeatureLayer ทำงานได้ดีจนกว่าฉันจะเพิ่มตัวกรองฟิลด์ ณ จุดนั้น วัตถุ geojson จะวาดเป็นระยะๆ (ส่วนใหญ่ไม่เลย) ฉันอาจเห็นรูปร่างหนึ่งหรือสองรูปร่างบนหน้าจอ

ตัวอย่างโค้ดที่ http://codepen.io/BBurnworth/pen/fhBrG/

สาย 32-36:

//บรรทัดด้านล่างใช้งานได้ var พัสดุ = ใหม่ L.esri.Layers.FeatureLayer(url + '24'); // **บรรทัดด้านล่างใช้งานได้ (ตรวจสอบแอตทริบิวต์ JSON ใน firebug) แต่พัสดุสั่นไหวและไม่แสดงอย่างถูกต้อง** // var พัสดุ = ใหม่ L.esri.Layers.FeatureLayer (url + '24', { ฟิลด์: "เมือง" });

นี่เป็นข้อบกพร่องหรือฉันกำลังทิ้งอะไรไว้? JSON (ใน Firebug) อ่านอย่างถูกต้อง โดยมีข้อมูลเรขาคณิตเข้ามา มันวาดไม่ถูกต้อง

ฉันชอบให้ใครสักคนชี้ให้เห็นบางอย่างที่ฉันขาดหายไป ฉันค่อนข้างจะดึงข้อมูลขั้นต่ำเปล่าแล้วใช้ task.IdentifyFeatures เพื่อรับข้อมูลแอตทริบิวต์เมื่อผู้ใช้ต้องการ


สองสามสิ่งที่นี่…

  1. ตัวเลือกตัวสร้างนั้นต้องการอาร์เรย์
  2. อย่างน้อยที่สุด คุณต้องรวมฟิลด์ OBJECTID ไว้ในอาร์เรย์นั้นเพื่อให้ทุกอย่างทำงานบนฝั่งไคลเอ็นต์ได้ตามที่ควร

    { ฟิลด์: ["OBJECTID", "CITY"] }

เราน่าจะจัดการกับสิ่งนั้นเพื่อผู้คน ฉันจะตรวจสอบมัน

http://codepen.io/anon/pen/pjEtD


บล็อกการสนับสนุนทางเทคนิคของ Esri

โดย Andrew--Johnson

ข้อมูล 3 มิติเป็นที่แพร่หลายมากขึ้นในปัจจุบันและได้รับการส่งเสริมเป็นพิเศษทั่วทั้งแพลตฟอร์ม ArcGIS ตั้งแต่ฉากในเว็บ ไปจนถึง CityEngine ไปจนถึง ArcGIS Pro มีแอปพลิเคชันต่างๆ มากมายให้นำเข้า จัดการ สร้างแบบจำลอง และแบ่งปันข้อมูล 3D ของคุณ เพื่อให้ได้ผลลัพธ์ที่คุณต้องการ อาจต้องใช้ขั้นตอนและเครื่องมือมากมาย เพื่อสำรวจขั้นตอนและเครื่องมือเหล่านี้ ต่อไปนี้คือคำแนะนำและเคล็ดลับบางประการสำหรับการทำงานกับข้อมูล 3 มิติใน ArcGIS

ระบบพิกัดไฟล์ 3 มิติ

รูปแบบ 3D ส่วนใหญ่ไม่ได้จัดเก็บระบบพิกัด GeoVRML และ KML เป็นข้อยกเว้นเพียงอย่างเดียว KML จะใช้ระบบพิกัด WGS 1984 และเมตรสำหรับหน่วยวัด ต้องวางประเภทอื่นทั้งหมด (DAE, 3DS, OBJ) อย่างถูกต้อง ไม่เช่นนั้นอาจนำเข้าที่ "0,0" (นอกชายฝั่งแอฟริกา) เคล็ดลับ #1

หากคุณกำลังใช้ CityEngine คุณสามารถลากและวางรูปร่างของคุณจากหน้าต่างตัวนำทางไปยังฉากได้ (เวิร์กโฟลว์นี้จะถือว่าระบบพิกัดฉากได้รับการตั้งค่าไว้แล้ว) เมื่อคุณส่งออกรูปร่างไปยังคลาสคุณลักษณะแบบหลายแพตช์ ระบบพิกัดจะถูกสร้างขึ้นด้วยข้อมูล เพื่อให้คุณสามารถนำรูปร่างไปไว้ในผลิตภัณฑ์ ArcGIS อื่นได้ นำเข้าภาพรวม เคล็ดลับ #2

เวิร์กโฟลว์เดียวกันสามารถทำได้ใน ArcGIS Pro สร้างคลาสฟีเจอร์ multipatch ที่ว่างเปล่า ไปที่ Editor > สร้างคุณสมบัติ > Select Model แล้วคลิกลูกโลกเพื่อวางโมเดล เคล็ดลับ #3 ใช้เครื่องมือ Replace with Model (ArcScene หรือ ArcGlobe) หรือเครื่องมือ Replace with Multipatch (ArcGIS Pro)ArcGIS Desktop แทนที่ด้วย ModelArcGIS Pro แทนที่ด้วย Multipatch Trick #4

หากคุณกำลังใช้ ArcScene, ArcGlobe หรือ ArcGIS Pro ให้วางโมเดลด้วยตนเองในระหว่างเซสชันการแก้ไขโดยใช้การดำเนินการย้าย หมุน หรือปรับขนาด ย้าย หมุน หรือปรับขนาดคุณลักษณะ หมายเหตุ: มีปัญหาที่ทราบเกี่ยวกับเครื่องมือนำเข้าไฟล์ 3D พารามิเตอร์ตำแหน่งการจัดวางไม่ได้รับเกียรติ ดังนั้นใน ArcGIS 10.4.1 หรือ ArcGIS Pro 1.3 เครื่องมือนี้จึงไม่ใช่ตัวเลือกที่ใช้งานได้ ปัญหานี้มีแผนที่จะแก้ไขในรุ่นต่อๆ ไป

ในการนำเข้าไฟล์ 3D ที่มีพื้นผิว คุณต้องแน่ใจว่าพื้นผิวนั้นอยู่ถัดจากไฟล์ 3D ไม่ว่าจะเป็นไฟล์รูปภาพเดี่ยวหรือโฟลเดอร์ที่มีรูปภาพ หมายเหตุ: ทั้งไฟล์และโฟลเดอร์ต้องมีชื่อเดียวกันเพื่อให้ซอฟต์แวร์จดจำพื้นผิวได้ เคล็ดลับ #1

รองรับพื้นผิวในไฟล์หรือฐานข้อมูลทางภูมิศาสตร์ขององค์กรเท่านั้น Shapefile multipatches ไม่รองรับพื้นผิว ดังนั้นอย่าลืมนำเข้า multipatch ลงใน geodatabase

ตรวจสอบให้แน่ใจว่าข้อมูล 3 มิติของคุณมีค่า z ที่ถูกต้อง เมื่อแชร์ฉากเว็บหรือนำเข้าข้อมูลไปยัง ArcGIS Pro คุณต้องแน่ใจว่าค่าระดับความสูงนั้นถูกต้อง เคล็ดลับ #1

หากมัลติแพตช์ของคุณไม่อยู่ในระดับความสูงที่ถูกต้อง คุณสามารถใช้เคล็ดลับนี้ได้ ใน ArcGIS Pro ให้ตั้งค่าข้อมูลหลายแพตช์ "บนพื้นดิน" และใช้เครื่องมือ Layer 3D To Feature Class ค่าระดับความสูงจะถูกฝังลงในแพตช์หลายตัว เคล็ดลับ #2

หากคุณกำลังใช้ข้อมูลฟีเจอร์อย่างง่าย (ไม่ใช่หลายแพตช์) ให้ใช้เครื่องมือเพิ่มข้อมูลพื้นผิวเพื่อเพิ่มค่า z ให้กับข้อมูล นอกจากนี้ คุณสามารถเพิ่มค่า z ลงในตารางแอตทริบิวต์และด้วยเครื่องมือเพิ่มข้อมูล Z คุณสามารถตรวจสอบค่าด้วยผลลัพธ์ของเครื่องมือได้ หากข้อมูลไม่มีค่าระดับความสูงที่ถูกต้อง โปรดดูเคล็ดลับถัดไป

ทำความเข้าใจว่าเครื่องมือใดสามารถสร้างข้อมูล 3D ได้: Layer 3D To Feature Class, Interpolate Shape หรือ Feature To 3D By Attribute

ทำความเข้าใจข้อมูล 3 มิติของคุณ รูปหลายเหลี่ยม 2 มิติที่อัดแล้วไม่ใช่คุณสมบัติ 3 มิติที่แท้จริง ดังนั้นคุณต้องส่งออกไปยังหลายแพตช์เพื่อทำให้รูปหลายเหลี่ยมนั้นเป็นคุณสมบัติ 3 มิติที่แท้จริง คุณสมบัติจุด เส้น และรูปหลายเหลี่ยมแบบธรรมดาถือเป็นข้อมูล 3 มิติ หากมีค่า z ที่ถูกต้อง คุณสมบัติ 2D สามารถแสดงเป็นสัญลักษณ์ได้โดยใช้สัญลักษณ์เครื่องหมาย 3 มิติ

ทราบความแตกต่างระหว่างคลาสฟีเจอร์ที่เปิดใช้งาน z และคลาสฟีเจอร์ที่ไม่เปิดใช้งาน z ที่มีฟิลด์ z ในตารางแอตทริบิวต์ คลาสคุณลักษณะต้องเปิดใช้งาน z เพื่อแสดงที่ระดับความสูงที่ถูกต้อง คุณอาจเห็นช่อง z ในตารางแอตทริบิวต์ แต่นั่นไม่ได้หมายความว่าเรขาคณิตมีค่า z ที่ถูกต้อง สามารถตรวจสอบได้โดยการแก้ไขจุดยอดหรือเพิ่มค่า z ลงในตารางแอตทริบิวต์ตามที่อธิบายไว้ข้างต้น

แม้ว่าบล็อกนี้จะไม่ครอบคลุมทุกแง่มุมของการทำงานกับข้อมูล 3 มิติ แต่ฉันหวังว่าข้อมูลนี้จะให้ข้อมูลที่มีค่าสำหรับการทำงานกับข้อมูล 3 มิติบนแพลตฟอร์ม ArcGIS Andrew J. – นักวิเคราะห์การสนับสนุนเดสก์ท็อป


เซิร์ฟเวอร์ไทล์ Protobuf

การทำงานกับแผนที่นั้นน่าทึ่งมาก การแสดงข้อมูลภายในแผนที่เป็นส่วนที่ยุ่งยากที่สุดเมื่อคุณกำลังพัฒนาแพลตฟอร์มที่มีข้อมูลเชิงพื้นที่ ขั้นตอนเล็กน้อยในการแสดงข้อมูลในแผนที่คือการใช้ไทล์ ในโพสต์นี้ เราจะสร้างเซิร์ฟเวอร์ไทล์ขนาดเล็กที่จะให้บริการไทล์ protobuf โดยใช้ Node.js, Hapi, Redis และ Postgres

บทช่วยสอนนี้ได้รับแรงบันดาลใจอย่างมากใน PostGIS ถึง Protobuf (พร้อมไทล์เวกเตอร์) โปรดตรวจสอบ โปรดทราบว่าบทช่วยสอนนี้จะแสดงการใช้งานเซิร์ฟเวอร์ไทล์ขั้นพื้นฐาน หากคุณต้องการหาวิธีการใช้งานที่ได้รับการพัฒนาและทดสอบมากขึ้น คุณสามารถลองใช้ TileStache หรือคุณอาจพบยูทิลิตี้ดีๆ มากมายที่นี่ บอกว่าฉันหวังว่าคุณจะสนุกกับการสร้างเซิร์ฟเวอร์มินิไทล์ของคุณเอง

การตั้งค่า Docker และ Docker-Compose

นักเทียบท่าจะช่วยให้เราสร้างคอนเทนเนอร์และเรียกใช้โครงการของเราได้ทุกที่ (ตราบใดที่เครื่องรองรับ Docker) ละเว้นปัญหาทั้งหมดของเวอร์ชันแพ็คเกจหรือการตั้งค่าฐานข้อมูลที่ยุ่งยากสำหรับบทช่วยสอนง่ายๆ เช่นนี้ บทช่วยสอนนี้จะใช้ docker-compose 1.11.2 และ Docker 17.03.0-ce เพื่อตรวจสอบเวอร์ชันของคุณให้รันคำสั่งต่อไปนี้:

เริ่มต้นด้วยการสร้าง Dockerfiles สองรายการในไดเร็กทอรีราก Dockerfile ตัวแรกจะใช้เพื่อสร้าง package.json และ npm-shrinkwrap.json ของเรา ส่วนอันที่สองจะเป็นตัวที่รับผิดชอบในการเริ่มเซิร์ฟเวอร์ไทล์

Dockerfile อธิบายตนเองได้ เรากำลังสร้างภาพที่มีการพึ่งพาที่เราต้องการ เพื่อให้เซิร์ฟเวอร์ไทล์ของเราสามารถทำงานได้ แต่มี gotcha สองสามรายการภายในการพึ่งพาเหล่านี้:

1.- Mapnik เนื่องจากเว็บไซต์อย่างเป็นทางการระบุว่า mapnik ได้รวมเอาเอาท์พุตภาพที่สมบูรณ์แบบพิกเซลเข้ากับอัลกอริธึมการทำแผนที่ที่รวดเร็วและเปิดเผยอินเทอร์เฟซใน C++, Python และ Node เราจะใช้ไลบรารีนี้เพื่อสร้างไทล์ในเซิร์ฟเวอร์ของเรา
2.- package.json และ npm-shrinkwrap.json ที่หายไป สาเหตุที่ไฟล์เหล่านี้ไม่ปรากฏในขณะนี้ เป็นเพราะเราต้องการใช้ Docker และ docker-compose เพื่อสร้างไฟล์ทั้งหมด

ตอนนี้เรามี Dockerfile แล้ว เราจะต้องสร้างคอนเทนเนอร์อื่นๆ ที่จะช่วยให้พัฒนาได้ง่าย บริการแรกที่เราจะประกาศในไฟล์ docker-compose.yml ของเราคือคอนเทนเนอร์โหนด เราจะใช้คอนเทนเนอร์นี้เพื่อสร้างไฟล์ package.json และ npm-shrinkwrap.json ให้สร้างไฟล์ docker-compose.yml ในไดเร็กทอรีรากของเรา:

ด้วยวิธีนี้เราสามารถเรียกใช้คอนเทนเนอร์ที่สามารถเรียกใช้โหนดได้ ลองใช้คอนเทนเนอร์นี้เพื่อสร้างไฟล์ของเรา มาสร้างโหนดคอนเทนเนอร์ของเราและเรียกใช้คำสั่งที่ต้องการ:

ตอนนี้ ถ้าเราดูในไดเร็กทอรีราก เราจะพบไฟล์ที่สร้างขึ้นใหม่สองไฟล์ คือ package.json และ npm-shrinkwrap.json ไฟล์อาจมีการเป็นเจ้าของที่แตกต่างกันซึ่งทำให้เกิดปัญหาในการเขียน การแก้ไขปัญหานี้ เราสามารถเปลี่ยนความเป็นเจ้าของได้อย่างรวดเร็วโดยทำดังนี้

ให้สร้างไฟล์ server.js เพื่อทดสอบคอนเทนเนอร์เซิร์ฟเวอร์ของเรา:

ให้เพิ่มคอนเทนเนอร์สำหรับเซิร์ฟเวอร์ของเราใน docker-compose.yml ของเรา:

ในตัวเลือกคำสั่งของเรา เราตั้งค่า npm run start-development ขณะนี้ package.json ของเราไม่มีสคริปต์นี้ มาเพิ่มลงในฟิลด์ "scripts" กัน:
package.json

เรากำลังใช้ nodemon เพื่อรีโหลดโหนดเซิร์ฟเวอร์ของเราโดยอัตโนมัติ และหลีกเลี่ยงการใช้ ctlr + c และเรียกใช้ docker-compose up tile-server สำหรับการเปลี่ยนแปลงในไฟล์เซิร์ฟเวอร์ของเราในแต่ละครั้ง เมื่อเปลี่ยน docker-compose.yml เราต้องรีสตาร์ทกระบวนการ docker-compose โดยใช้ ctlr + c และรัน docker-compose up tile-server สร้างไฟล์ server.js เพื่อทดสอบการกำหนดค่าของเราอย่างรวดเร็ว:
server.js

ในที่สุด เราก็สามารถทดสอบได้ว่าการตั้งค่าของเราทำงานได้หรือไม่โดยเรียกใช้ docker-compose up tile-server :

คอนเทนเนอร์ของเราใช้งานได้ แต่คอนเทนเนอร์ของ server.js เป็นเพียง console.log เราต้องการเซิร์ฟเวอร์ที่จะรับคำขอ http มาสร้างด้วยความช่วยเหลือของ hapijs

เซิฟเวอร์

เราจะใช้ hapi เพื่อสร้างเซิร์ฟเวอร์อย่างง่าย การสร้างเซิร์ฟเวอร์ด้วย hapi นั้นค่อนข้างง่าย:
server.js

ตอนนี้เราสามารถเรียกใช้เซิร์ฟเวอร์ของเราได้ด้วยการรัน docker-composer run tile-server :

เราสามารถทดสอบเซิร์ฟเวอร์ที่ใช้งานได้ของเราโดยไปที่เบราว์เซอร์ของเราแล้วไปที่ http://0.0.0.0:8081

น่าทึ่ง เซิร์ฟเวอร์ของเราใช้งานได้ เราจะต้องเชื่อมต่อกับฐานข้อมูล ในบทช่วยสอนนี้ เราจะใช้ Postgres ให้สร้างปลั๊กอินที่จะช่วยให้เราเชื่อมต่อกับฐานข้อมูล

ปลั๊กอิน Postgres

ในการเชื่อมต่อจากเซิร์ฟเวอร์ของเราไปยังฐานข้อมูล เราจำเป็นต้องเพิ่มคอนเทนเนอร์ลงใน docker-compose.yml เราจะใช้รูปภาพของ postgis:
นักเทียบท่า-compose.yml

คอนเทนเนอร์ไทล์เซิร์ฟเวอร์มีตัวเลือกใหม่ที่กำหนดไว้ the ลิงค์ ตัวเลือกจะเชื่อมโยงไปยังคอนเทนเนอร์ในบริการอื่น เราต้องการตัวเลือกนี้เพื่อที่เราจะสามารถสื่อสารกับฐานข้อมูลของเราได้ มันจะแสดงการพึ่งพาระหว่างบริการต่างๆ ซึ่งจะตัดสินลำดับการเริ่มต้น ขึ้นอยู่กับ ตัวเลือกจะเริ่มบริการตามลำดับการพึ่งพาในกรณีของเรา db จะเริ่มก่อนเรา ไทล์เซิร์ฟเวอร์. ถ้าเรารัน docker-compose up tile-server มันจะสร้างและเริ่มทำงานด้วย db.

ขณะนี้เรามีเซิร์ฟเวอร์และฐานข้อมูลของเราแล้ว ณ ตอนนี้ฐานข้อมูลของเราว่างเปล่า ให้ได้รับข้อมูลตัวอย่างที่แทรกลงในฐานข้อมูลของเรา ในบทช่วยสอนนี้ เราจะใช้รัฐต่างๆ จากเม็กซิโก ไฟล์ .sql ต่อไปนี้จะสร้างสคีมาและตารางซึ่งจะมีข้อมูลทั้งหมดที่เราต้องการ:

ฐานข้อมูลของเรามีข้อมูลและทำงานอย่างถูกต้อง ตอนนี้มาเชื่อมต่อฐานข้อมูลของเรากับเซิร์ฟเวอร์ของเราโดยสร้างปลั๊กอิน hapi หากคุณไม่ได้ใช้ปลั๊กอิน hapi โปรดตรวจสอบเอกสารเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของปลั๊กอิน

สร้าง ปลั๊กอิน โฟลเดอร์ในไดเร็กทอรีรูทของเราและ a postgres ภายในโฟลเดอร์นั้น ปลั๊กอิน postgres จะประกอบด้วยสองไฟล์คือ package.json และ index.js ให้สร้างไฟล์เหล่านั้น คุณควรมีโครงสร้างเหมือนด้านล่าง:

ไฟล์ index.js จะมีตรรกะในการเชื่อมต่อกับฐานข้อมูลของเราและสร้างการเชื่อมต่อซึ่งจะพร้อมใช้งานในภายหลังในเครื่องจัดการของเรา

อาร์เรย์ปลั๊กอินในเซิร์ฟเวอร์ของเราว่างเปล่าในขณะนี้ เราจำเป็นต้องรวมปลั๊กอินที่สร้างขึ้นใหม่ลงในอาร์เรย์เพื่อให้ hapi โหลดได้

ทันทีที่เราเปลี่ยนอาร์เรย์ปลั๊กอิน เราควรเห็นการโหลดซ้ำในเซิร์ฟเวอร์ของเราผ่าน nodemon:

มาดูกันว่าทุกอย่างเรียบร้อยหรือไม่ มาเพิ่มเส้นทางเล็ก ๆ เพื่อทดสอบการเชื่อมต่อกับฐานข้อมูลของเรา:

ไปที่ http://0.0.0.0:8081/postgres-test แล้วตรวจสอบผลลัพธ์ คุณควรเห็นสิ่งนี้:

ปลั๊กอินเลเยอร์

ในการแสดงแผนที่แบบเรียงต่อกันในเบราว์เซอร์มักจะต้องได้รับการสนับสนุนจากเฟรมเวิร์กการทำแผนที่เว็บ เฟรมเวิร์กนี้จัดการการดึงไทล์ การแสดงผล การแคช และการนำทางผู้ใช้ เฟรมเวิร์กยอดนิยมสำหรับแผนที่แบบเรียงต่อกัน ได้แก่ Google Maps API, OpenLayers และ Leafet ในบทช่วยสอนนี้เราจะใช้แผ่นพับ
แผนที่เว็บแบบเรียงต่อกันส่วนใหญ่เป็นไปตามข้อตกลงของ Google Maps บางประการ:

  • ไทล์มีขนาด 256x256 พิกเซล
  • ที่ระดับการซูมภายนอกสูงสุด 0 โลกทั้งใบสามารถแสดงได้ในไทล์แผนที่เดียว
  • ระดับการซูมแต่ละระดับจะเพิ่มเป็นสองเท่าในทั้งสองมิติ ดังนั้นไทล์เดี่ยวจะถูกแทนที่ด้วย 4 ไทล์เมื่อซูมเข้า ซึ่งหมายความว่าระดับการซูมประมาณ 22 ระดับนั้นเพียงพอสำหรับวัตถุประสงค์ในทางปฏิบัติส่วนใหญ่
  • ใช้การฉายภาพ Web Mercator โดยจำกัดละติจูดประมาณ 85 องศา

มาตรฐาน OpenStreetMap โดยพฤตินัยหรือที่เรียกว่า Slippy Map Tilenames[2] หรือ XYZ[3] เป็นไปตามอนุสัญญาเหล่านี้และเพิ่มมากขึ้น:

  • โครงร่างการนับ X และ Y
  • ภาพ PNG สำหรับกระเบื้อง
  • รูปภาพแสดงผ่าน REST API โดยมี URL เช่น http:// /Z/X/Y.png โดยที่ Z คือระดับการซูม และ X และ Y ระบุไทล์

ชั้นกระเบื้องแรสเตอร์

เลเยอร์ไทล์แรสเตอร์ส่งแผนที่ฐานไปยังแอปพลิเคชันไคลเอนต์ของคุณเป็นไฟล์รูปภาพ (เช่น รูปแบบ JPG หรือ PNG) ที่แสดงผลล่วงหน้าและจัดเก็บไว้ในเซิร์ฟเวอร์ และแสดงตามที่ลูกค้าเป็นอยู่ เลเยอร์ไทล์แรสเตอร์เหมาะสมที่สุดสำหรับแผนที่ฐานที่ให้บริบททางภูมิศาสตร์ของแผนที่ เช่น ภาพ (เช่นเดียวกับในแผนที่ฐานภาพโลก) หรือแผนที่ตามคุณลักษณะ เช่น ในแผนที่ภูมิประเทศ เนชั่นแนลจีโอกราฟฟิก มหาสมุทร และแผนที่ฐานอื่นๆ เลเยอร์ไทล์แรสเตอร์ยังสามารถประกอบด้วยเลเยอร์การทำงานแบบคงที่ เช่น แผนที่เฉพาะของข้อมูลของคุณ

รูปแบบเลเยอร์ไทล์นั้นรวดเร็วในการส่งผ่านอินเทอร์เน็ตและเข้าใจได้ง่ายโดยแอปพลิเคชันซอฟต์แวร์การทำแผนที่ทั่วไปส่วนใหญ่ ดังนั้นแผนที่ฐานเหล่านี้จึงไม่เพียงเข้ากันได้กับ ArcGIS และเว็บแอปที่สร้างด้วย ArcGIS API แต่ยังรวมถึงแอปของบุคคลที่สามที่ใช้โปรโตคอล OGC เช่น WMS/WMTS ประโยชน์อื่นๆ ของเลเยอร์ไทล์แรสเตอร์มีดังต่อไปนี้:

  • ทำงานได้ดีกับแอปพลิเคชันและอุปกรณ์ที่หลากหลาย (เว็บ เดสก์ท็อป และมือถือ) รวมถึงแอปพลิเคชันเดสก์ท็อป เช่น ArcMap และเว็บเบราว์เซอร์เวอร์ชันเก่า
  • ให้ความสามารถด้านการทำแผนที่ระดับไฮเอนด์ เช่น การวางฉลากขั้นสูงและสัญลักษณ์
  • รองรับแหล่งข้อมูลแรสเตอร์ต่างๆ เช่น ภาพและข้อมูลระดับความสูง
  • สามารถพิมพ์จากแอปพลิเคชันการทำแผนที่เว็บ

ชั้นกระเบื้องเวกเตอร์

เลเยอร์ไทล์เวกเตอร์ส่งข้อมูลแผนที่เป็นไฟล์เวกเตอร์ (เช่น รูปแบบ PBF) และรวมเลเยอร์อย่างน้อยหนึ่งเลเยอร์ที่แสดงผลบนไคลเอนต์ตามสไตล์ที่ส่งมาพร้อมกับเลเยอร์ ไทล์เวกเตอร์มีข้อมูลที่คล้ายกับที่พบในแผนที่ฐานไทล์แรสเตอร์ที่มีอยู่บางส่วน (แต่ไม่ใช่ทั้งหมด) แต่จะจัดเก็บการแสดงเวกเตอร์ของข้อมูล กล่าวคือ คุณลักษณะทางภูมิศาสตร์จะแสดงเป็นจุด เส้น และรูปหลายเหลี่ยมในรูปแบบที่เข้าใจ แอปพลิเคชันไคลเอนต์ ซึ่งแตกต่างจากเลเยอร์ไทล์แรสเตอร์ เลเยอร์ไทล์เวกเตอร์สามารถปรับให้เข้ากับความละเอียดของอุปกรณ์แสดงผลและจัดรูปแบบใหม่เพื่อการใช้งานที่หลากหลาย ไทล์เวกเตอร์มีขนาดไฟล์ที่เล็กกว่าไทล์แรสเตอร์ ซึ่งแปลเป็นแผนที่ที่เร็วขึ้นและประสิทธิภาพที่ดีขึ้น การผสมผสานระหว่างประสิทธิภาพการเข้าถึงไทล์และการวาดเวกเตอร์ช่วยให้ไทล์สามารถปรับให้เข้ากับความละเอียดของจอแสดงผล ซึ่งอาจแตกต่างกันไปตามอุปกรณ์ต่างๆ

ในโปรแกรมดูแผนที่ การวาดแผ่นเวกเตอร์ฝั่งไคลเอ็นต์ช่วยให้คุณปรับแต่งสไตล์ของเลเยอร์ไทล์เวกเตอร์และเนื้อหาของแผนที่ได้ ข้อดีอื่นๆ ของเลเยอร์ไทล์เวกเตอร์มีดังต่อไปนี้:

  • สามารถใช้เพื่อสร้างรูปแบบแผนที่ต่างๆ มากมายโดยใช้ชุดไพ่เวกเตอร์ชุดเดียว คุณสามารถปรับแต่งเลเยอร์ไทล์ของเวกเตอร์ได้ ตัวอย่างเช่น ซ่อนการมองเห็น เปลี่ยนสัญลักษณ์และแบบอักษร เปลี่ยนภาษาสำหรับป้ายกำกับ และอื่นๆ โดยไม่ต้องสร้างไทล์ใหม่
  • ดูดีบนจอแสดงผลที่มีความละเอียดสูง (เช่น อุปกรณ์เรตินา) ที่มีความละเอียดที่ดีกว่าไทล์แรสเตอร์ที่มีความละเอียดต่ำ (96 dpi) มาก โดยไม่จำเป็นต้องสร้างเวอร์ชันที่มีความละเอียดสูงแยกต่างหาก ไทล์เวกเตอร์สามารถแสดงได้ในทุกระดับด้วยสัญลักษณ์และป้ายกำกับที่ชัดเจนในแอปพลิเคชันเดสก์ท็อป เช่น ArcGIS Pro
  • สามารถสร้างได้เร็วกว่ามากและมีทรัพยากรฮาร์ดแวร์น้อยกว่าไทล์แรสเตอร์ที่เกี่ยวข้อง ซึ่งจะช่วยลดต้นทุนในการสร้างไทล์และปรับปรุงความเร็วในการอัปเดตข้อมูลให้พร้อมใช้งาน
  • ไทล์เวกเตอร์มีขนาดเล็กกว่าไทล์แรสเตอร์ที่สอดคล้องกันมาก ซึ่งช่วยลดต้นทุนในการจัดเก็บและให้บริการไทล์
  • สามารถฉายในระบบพิกัดต่างๆ โดยใช้แอปพลิเคชันเดสก์ท็อปเช่น ArcGIS Pro โดยไม่ผิดเพี้ยนของฉลากและสัญลักษณ์อื่นๆ

คุณสามารถเพิ่มเลเยอร์ไทล์เวกเตอร์เป็นเลเยอร์การทำงานหรือแผนที่ฐานให้กับโปรแกรมดูแผนที่หรือโปรแกรมดูฉาก คุณสามารถใช้แผนที่และฉากที่มีเลเยอร์ไทล์เวกเตอร์ในเว็บแอปโดยใช้แอปที่กำหนดค่าได้, Web AppBuilder หรือ ArcGIS API สำหรับ JavaScript เลเยอร์ไทล์ของเวกเตอร์มีประสิทธิภาพดีที่สุดในเครื่องที่มีฮาร์ดแวร์ที่ใหม่กว่า และสามารถแสดงใน Internet Explorer 11 และใหม่กว่า และเบราว์เซอร์เดสก์ท็อปเวอร์ชันปัจจุบันอื่นๆ ส่วนใหญ่ รวมถึง Chrome, Firefox และ Safari

ตอนนี้เราเข้าใจมากขึ้นเล็กน้อยเกี่ยวกับไทล์เวกเตอร์ มาทำความเข้าใจว่าเราจะขอไทล์ไปยังเซิร์ฟเวอร์ของเราอย่างไร ดังที่ได้กล่าวไว้ก่อนหน้านี้เพื่อแสดงแผนที่แบบเรียงต่อกัน เราจำเป็นต้องมีเฟรมเวิร์กการทำแผนที่เว็บ ในขณะนี้ เราจะใช้แผ่นพับเพื่อแสดงไทล์เวกเตอร์ของเรา ในเวอร์ชัน 1.0.3 แผ่นพับไม่อนุญาตให้โหลดและแสดงไทล์เวกเตอร์โดยใช้ API นี่อาจเป็นปัญหา แต่ด้วยความพยายามอย่างมากของผู้ร่วมให้ข้อมูลและระบบปลั๊กอินแผ่นพับ เราจึงสามารถแสดงไทล์เวกเตอร์ของเราได้ เราจะใช้ไลบรารี Leaflet.VectorGrid

ให้สร้างไฟล์ html ซึ่งจะช่วยเราแสดงแผนที่ของเรา เพื่อให้ hapi ให้บริการสินทรัพย์แบบคงที่ เราจำเป็นต้องมีปลั๊กอิน เฉื่อย จะช่วยเราในเรื่องข้อกำหนดนี้

และสร้างไฟล์ index.html ในไดเรกทอรีรากของเรา:
index.html

เราต้องการเส้นทางเพื่อให้บริการ html นี้ มาเพิ่มสิ่งนี้ในเซิร์ฟเวอร์ของเรา:

โดยไปที่ http://0.0.0.0:8081/test-vector-tiles เราจะเห็นแผนที่แผ่นพับของเรา หากใช้ Google Chrome คุณสามารถเปิด DevTools และไปที่แท็บเครือข่าย เลือกตัวกรอง Img และคุณจะสามารถดูคำขอไปยังเครือข่ายการส่งเนื้อหา carto:

อย่างที่คุณเห็นมีการร้องขอกับ // มาลองสร้าง handler ตามรูปแบบนี้กัน

ด้วยฐานข้อมูลที่ใช้งานได้ เราจะดำเนินการสร้างปลั๊กอินเลเยอร์ของเรา ในของเรา ปลั๊กอิน โฟลเดอร์สร้าง ชั้น โฟลเดอร์ เนื่องจากปลั๊กอิน postgres ของเรา ปลั๊กอินเลเยอร์จะประกอบด้วยสองไฟล์คือ package.json และ index.js ให้สร้างไฟล์เหล่านั้น คุณควรมีโครงสร้างเหมือนด้านล่าง:

ในขณะนี้ ปลั๊กอินเลเยอร์ของเราจะมี console.log อย่างง่าย:

และรวมไว้ในอาร์เรย์ปลั๊กอินของเรา:

ทันทีที่เราเปลี่ยนอาร์เรย์ปลั๊กอิน เราควรเห็นการโหลดซ้ำในเซิร์ฟเวอร์ของเราผ่าน nodemon:

ให้สร้างโฟลเดอร์เลเยอร์ในโฟลเดอร์ plugins/layers/ ของเราและสร้างไฟล์ States.js:

ให้ลองค้นหาว่าเกิดอะไรขึ้นในตัวจัดการ โปรดทราบว่าตัวจัดการนี้จะทำงานสำหรับแต่ละไทล์ในกล่องขอบเขต

เรากำลังนำเข้าแพ็คเกจ sphericalmercator ซึ่งจะช่วยเราด้วยการคำนวณการฉายภาพสำหรับการแปลงระหว่างเมตรปรอท พิกเซลหน้าจอ (ขนาด 256x256 หรือไทล์ขนาดที่กำหนดค่าได้) และละติจูด/ลองจิจูด

ต่อไปเราจะประกาศแบบสอบถาม เราจะใช้สองฟังก์ชัน ฟังก์ชันแรกคือ st_intersects ซึ่งคืนค่า TRUE หากเรขาคณิต/ภูมิศาสตร์ “ตัดกันเชิงพื้นที่ใน 2 มิติ” คุณอาจถูกล่อลวงให้ใช้ ST_CONTAINS หรือ ST_Within แต่เราต้องได้รูปหลายเหลี่ยมทั้งหมดที่ตัดกับรูปหลายเหลี่ยมที่กำหนด

ฟังก์ชันที่สองคือ ST_MakeEnvelopeฟังก์ชันนี้จะสร้างรูปหลายเหลี่ยมสี่เหลี่ยมจากค่าต่ำสุดและค่าสูงสุด จำไว้ว่าตัวจัดการนี้จะรันสำหรับแต่ละไทล์ในกล่องขอบเขต ดังนั้นรูปหลายเหลี่ยมที่เราจะสร้างจะเป็นเพียงไทล์

โดยทั่วไปเรากำลังบอกว่าขอฟิลด์ topojson และ cve_ent จากตาราง estados โดยที่ geom ของฟิลด์ตัดกับรูปหลายเหลี่ยมสี่เหลี่ยมที่เราจัดเตรียมไว้ให้

ตอนนี้ขอพารามิเตอร์คำขอ (ซึ่งจะเป็นค่า xyz ของเราจากการแสดงไทล์) และใช้เพื่อแปลงเป็น bbox ของแบบฟอร์ม [w, s, e, n] เมธอด bbox มีลายเซ็นต่อไปนี้ bbox(x, y, zoom, tms_style, srs) พารามิเตอร์สามตัวแรกมาจากรูปแบบไทล์ xyz tms_style จะตัดสินใจว่าจะคำนวณโดยใช้ tms-style หรือไม่ และ srs จะตั้งค่าการฉายภาพสำหรับผลลัพธ์ bbox (WGS84|900913).

ตอนนี้เรามีวิธีสร้างรูปหลายเหลี่ยมผ่านฟังก์ชัน ST_MakeEnvelope แล้ว มาเริ่มการสืบค้นกัน มาสก์ผลลัพธ์ของแบบสอบถามใด ๆ มีลายเซ็น db.any (แบบสอบถาม ค่า) ต่อไปนี้ ดังนั้นลองส่งการสืบค้นและค่าของเราเป็นอาร์เรย์จาก bbox ที่เพิ่งสร้างขึ้นของเราผ่านแพ็คเกจ sphericalmercator และตอบกลับด้วยผลลัพธ์การสืบค้น

เรามีตัวจัดการที่ใช้งานได้ แต่เรายังคงไม่มีเส้นทางที่จะเรียกใช้ตัวจัดการนี้ ไปที่ไฟล์ดัชนีของเราที่โฟลเดอร์ปลั๊กอินเลเยอร์และลงทะเบียนเส้นทางของเรา:
plugins/layers/index.js

ตอนนี้ถ้าเราไปที่ http://0.0.0.0:8081/layers/states/7/28/56.pbf เราควรได้รับการตอบกลับเหมือนด้านล่าง:

แล้วเกิดอะไรขึ้น? เราได้รับรูปหลายเหลี่ยมที่ตัดกันโดยรูปหลายเหลี่ยมแบบเรียงต่อกัน เราสามารถพูดได้ว่าที่ระดับการซูม 7 ดัชนีไทล์ 28, 56 มี 10 สถานะที่ตัดกันรูปหลายเหลี่ยมไทล์ นี่เป็นขั้นตอนเล็กน้อยในการส่งคืนไทล์เวกเตอร์ แต่ในขณะนี้ เราเพิ่งส่งคืนการตอบกลับ json เราจะใช้ mapnik เพื่อสร้างไทล์ของเรา:

เราต้องการพาธและโมดูล mapnik Mapnik รองรับสถาปัตยกรรมปลั๊กอินที่ช่วยให้สามารถเข้าถึงรูปแบบต่างๆ ได้ เราจำเป็นต้องให้การกำหนดค่า mapnik ของเราที่เราจะใช้ geojson เป็นรูปแบบ การลงทะเบียน geojson.input ผ่าน registerDatasource จะทำให้เราใช้ GeoJSON เป็นรูปแบบภายในโมดูล mapnik เราเพิ่งประกาศการพึ่งพาของเราสำหรับการสร้างไทล์ ตอนนี้มาสร้างฟังก์ชันสำหรับการสร้างไทล์ของเรา:

ขั้นแรก เรากำลังสร้างไทล์เวกเตอร์ใหม่โดยใช้ตัวสร้างไทล์ของ mapnik ซึ่งจะสร้างไทล์ตามข้อกำหนด Mapbox Vector Tile สำหรับข้อมูลเวกเตอร์แบบเรียงต่อกันที่บีบอัดและทำให้ง่ายขึ้น เรากำลังขอข้อมูล topojson ในแบบสอบถามของเราเพื่อลดขนาดการถ่ายโอนข้อมูล API สำหรับวัตถุ VectorTile จะไม่ยอมรับ topoJSON เราจะต้องแปลง topoJSON แต่ละอันให้เป็น GeoJSON ที่ถูกต้อง เราจะใช้โมดูล topojson เพื่อทำภารกิจนี้ให้สำเร็จ เมื่อเรามี FeatureCollection ที่ถูกต้อง เราอาจเพิ่มลงในไทล์ที่เราสร้างขึ้นโดยใช้เมธอด addGeoJSON น่าทึ่ง ไทล์ถูกสร้างขึ้น แต่เรายังต้องบีบอัดข้อมูล:

เมธอด getData จะดึงข้อมูลในไทล์เวกเตอร์เป็นบัฟเฟอร์ ลายเซ็นคือ getData([options], callback) ต่อไปนี้ เราสามารถปรับแต่งตัวเลือกได้เล็กน้อย แต่ค่าเริ่มต้นควรทำงานได้อย่างราบรื่น พารามิเตอร์ที่สองคือการเรียกกลับซึ่งช่วยให้งานนี้สามารถทำได้ในแบบอะซิงโครนัส เราได้รับข้อมูลจากไทล์ของเราเป็นบัฟเฟอร์ เราแค่ต้องบีบอัดข้อมูล แฟลท zlib จะบีบอัดบัฟเฟอร์ที่เราได้รับจากเมธอด getData ลายเซ็นสำหรับเมธอด deflate คือ deflate(buf[, options], callback) พารามิเตอร์ตัวแรกเป็นบัฟเฟอร์ และตัวที่สองคือคอลแบ็ก ดังนั้นวิธีนี้คือ แบบอะซิงโครนัสเช่นกัน เนื่องจากทั้งสองวิธีเป็นแบบ async เราจะรวมไว้ใน Promise สุดท้ายเราเพียงแค่ต้องตั้งค่าส่วนหัวในอินเทอร์เฟซการตอบกลับของเรา:

ไฟล์ state.js ของเราควรมีลักษณะดังนี้:
plugins/layers/layer/state.js

ทั้งหมดนี้ เราสามารถทดสอบด้วย curl ว่าจุดปลายของเราใช้งานได้หรือไม่:

จุดปลายทำงานและให้บริการไทล์เวกเตอร์เป็นโปรโตบัฟ ตอนนี้เราเพียงแค่ต้องแสดงในไฟล์ index.html ของเรา:

ไปที่ http://0.0.0.0:8081/test-vector-tiles และเราควรเห็นไทล์ของเราทำงานในแผนที่ของเรา น่าทึ่ง การจัดสไตล์สามารถทำได้โดยการรวมคุณสมบัติในการตอบกลับ GeoJSON ของคุณโดยเข้าร่วมในการค้นหาของคุณ สิ่งนี้:

ในฟังก์ชัน parse คุณจะต้องส่งฟิลด์ที่คุณต้องการไปยังอ็อบเจกต์คุณสมบัติ:

และกำหนดฟังก์ชั่นเพื่อกำหนดลักษณะคุณสมบัติตามคุณสมบัติที่ต้องการ:

เรามีไทล์การทำงานที่สามารถเปลี่ยนสไตล์ได้อย่างง่ายดาย หากเราจำไม่ผิดในตอนต้นของบทช่วยสอน เราบอกว่าเราจะใช้ redis ให้สร้างปลั๊กอิน redis เพื่อลดการเรียกไปยังฐานข้อมูลของเรา

ปลั๊กอิน Redis

Redis เป็นโอเพ่นซอร์ส (ลิขสิทธิ์ BSD) ที่จัดเก็บโครงสร้างข้อมูลในหน่วยความจำ ใช้เป็นฐานข้อมูล แคช และนายหน้าข้อความ Redis ไม่ใช่ที่เก็บคีย์-ค่าธรรมดา แต่จริงๆ แล้วเป็นเซิร์ฟเวอร์โครงสร้างข้อมูล ซึ่งสนับสนุนค่าประเภทต่างๆ สิ่งนี้หมายความว่าในขณะที่ในคีย์-ค่าดั้งเดิมเก็บคุณเชื่อมโยงคีย์สตริงกับค่าสตริง ใน Redis ค่าไม่ได้จำกัดอยู่เพียงสตริงธรรมดา แต่ยังสามารถเก็บโครงสร้างข้อมูลที่ซับซ้อนกว่าได้อีกด้วย

โครงสร้างที่ซับซ้อนอย่างหนึ่งคือสตริงที่ปลอดภัยแบบไบนารี เราจะใช้เพื่อหลีกเลี่ยงการเรียกฐานข้อมูลที่ไม่จำเป็น ในบางกรณี ข้อมูลไทล์จะไม่เปลี่ยนแปลงในช่วงระยะเวลาหนึ่ง และเพื่อประหยัดทรัพยากร เราสามารถจัดเก็บผลลัพธ์ของตัวจัดการของเราด้วย redis

เซิร์ฟเวอร์ redis ไม่มีอยู่ในการกำหนดค่าปัจจุบันของเรา มาเพิ่มใน docker-compose.yml ของเรา
นักเทียบท่า-compose.yml

สร้างโฟลเดอร์ redis ภายในไดเร็กทอรีปลั๊กอินของเรา และสร้างไฟล์ index.js และ package.json

เรากำลังใช้ bluebird.promisifyAll ในโมดูล redis ซึ่งตามที่เอกสารอธิบายสัญญาอ็อบเจ็กต์ทั้งหมดโดยผ่านคุณสมบัติของอ็อบเจ็กต์ และสร้าง async ที่เทียบเท่ากันของแต่ละฟังก์ชันบนอ็อบเจ็กต์และเชนต้นแบบ การใช้ Promises จะช่วยให้เราจัดการกับ Redis ได้อย่างสะอาดยิ่งขึ้น เรายังรวมวิธีการล้างแคชของเราผ่าน http ด้วย แน่นอนว่าจุดปลายนี้ควรเปิดเผยในการพัฒนาหรือปกป้องปลายทางเท่านั้น

อย่าลืมลงทะเบียนปลั๊กอินของเราในอาร์เรย์ของปลั๊กอินของเรา:

ให้ใช้เซิร์ฟเวอร์ redis ของเราผ่านปลั๊กอินของเรา:

เราประกาศฟังก์ชันใหม่ซึ่งจะดูแลการแคชไบนารีของเราโดยใช้ redis ตอนนี้เราต้องตรวจสอบก่อนว่าคีย์นั้นมีอยู่ในแคชของเราหรือไม่ getAsync จะดูแลสิ่งนั้น หากเราพบคีย์ในแคช เราจะสร้างบัฟเฟอร์จากสตริงที่ปลอดภัยแบบไบนารีที่เก็บไว้และใช้ฟังก์ชันตอบกลับProtoBufเพื่อคืนค่าที่ต้องการ ในกรณีที่เราไม่พบคีย์ของเราใน redis เราทำตามขั้นตอนเพื่อสร้างไทล์ของเรา แต่รวมถึงฟังก์ชัน setTileInCache เพิ่มเติมในสายสัญญา

การใช้ redis ช่วยให้เราลดเวลาตอบสนองจากเซิร์ฟเวอร์ของเราได้เล็กน้อย


เราได้เปรียบเทียบเวอร์ชัน R ที่ติดตั้งล่าสุดของเรา (3.0.2) ซึ่งสร้างด้วยไลบรารี blas/lapack ที่รวมไว้ เทียบกับเวอร์ชันล่าสุด (ณ เดือนเมษายน 2015) รีลีส 3.2.0 ที่สร้างด้วยไลบรารี Intel MKL บนฮาร์ดแวร์ HiPerGator1 (AMD Abu Dhabi 2.4GHz) CPU) และซีพียู Intel Haswell 2.3GHz ที่เรากำลังทดสอบการใช้งานที่เป็นไปได้ใน HiPerGator2 ผลลัพธ์ถูกนำเสนอในตาราง R Benchmark 2.5

  • ถาม: เมื่อฉันส่งงานโดยใช้แพ็คเกจ 'ขนาน' ดูเหมือนว่าเธรดทั้งหมดจะแชร์คอร์ CPU เดียวแทนที่จะทำงานบนคอร์แยกที่ฉันร้องขอ
    • ตอบ: บน SLURM คุณต้องใช้ --cpus-per-task เพื่อระบุจำนวนคอร์ที่พร้อมใช้งาน เช่น.

    จะอนุญาตให้ mcapply หรือฟังก์ชั่นอื่น ๆ จากแพ็คเกจ 'ขนาน' ทำงานบนคอร์ที่ร้องขอทั้งหมด


    Osmnx.elevation module¶

    รับระดับความสูงของโหนดและคำนวณเกรดขอบ

    osmnx.elevation. add_edge_grades ( จี, add_absolute=จริง, ความแม่นยำ=3 ) ¶

    เพิ่มแอตทริบิวต์เกรดให้กับแต่ละขอบกราฟ

    ฟังก์ชัน Vectorized เพื่อคำนวณเกรดที่กำหนด (กล่าวคือ เพิ่มขึ้นเหนือการวิ่ง) สำหรับแต่ละขอบในกราฟและเพิ่มลงในขอบเป็นแอตทริบิวต์ โหนดต้องมีแอตทริบิวต์ระดับความสูงอยู่แล้วจึงจะใช้ฟังก์ชันนี้ได้

    ดูเพิ่มเติมที่ฟังก์ชัน add_node_elevations

    • จี (เครือข่ายx.MultiDiGraph) – กราฟอินพุตพร้อมแอตทริบิวต์โหนดระดับความสูง
    • add_absolute (bool) – หากเป็น True ให้เพิ่มค่าสัมบูรณ์ของเกรดเป็นแอตทริบิวต์ grade_abs ด้วย
    • ความแม่นยำ (int) – ความแม่นยำทศนิยมเพื่อปัดเศษค่าเกรด

    จี – กราฟที่มีเกรดขอบ (และตัวเลือก grade_abs ) แอตทริบิวต์

    ห้ามใช้ เลิกใช้แล้ว จะถูกลบออกในรุ่นต่อๆ ไป

    ฟังก์ชันนี้และการตั้งค่าการยกระดับ_provider เลิกใช้แล้ว

    • จี (เครือข่ายx.MultiDiGraph) – เลิกใช้แล้ว ห้ามใช้
    • api_key (สตริง) – เลิกใช้แล้ว ห้ามใช้
    • max_locations_per_batch (int) – เลิกใช้แล้ว ห้ามใช้
    • หยุดชั่วคราว_duration (ลอย) – เลิกใช้แล้ว ห้ามใช้
    • ความแม่นยำ (int) – เลิกใช้แล้ว ห้ามใช้

    เพิ่มแอตทริบิวต์ระดับความสูง (เมตร) ให้กับแต่ละโหนดโดยใช้บริการเว็บ

    สิ่งนี้ใช้ Google Maps Elevation API และต้องใช้คีย์ API สำหรับทางเลือกในท้องถิ่นฟรี โปรดดูที่ฟังก์ชัน add_node_elevations_raster ดูเพิ่มเติมที่ฟังก์ชัน add_edge_grades

    • จี (เครือข่ายx.MultiDiGraph) – กราฟอินพุต
    • api_key (สตริง) – คีย์ Google Maps Elevation API
    • max_locations_per_batch (int) – จำนวนคู่พิกัดสูงสุดที่จะส่งในการเรียก API แต่ละครั้ง (หากสูงเกินไป เซิร์ฟเวอร์จะปฏิเสธคำขอเนื่องจากขีดจำกัดอักขระเกินขีดจำกัดสูงสุดที่อนุญาต)
    • หยุดชั่วคราว_duration (ลอย) – เวลาหยุดชั่วคราวระหว่างการเรียก API ซึ่งสามารถเพิ่มขึ้นได้หากคุณได้รับอัตราจำกัด
    • ความแม่นยำ (int) – ความแม่นยำทศนิยมกับค่าความสูงรอบ

    จี – กราฟพร้อมแอตทริบิวต์ระดับความสูงของโหนด

    เพิ่มแอตทริบิวต์การยกระดับให้กับแต่ละโหนดจากไฟล์แรสเตอร์ในเครื่อง

    หากพาธไฟล์เป็นรายการพาธ สิ่งนี้จะสร้างแรสเตอร์เสมือนที่ประกอบด้วยไฟล์ที่พาธเหล่านั้นเป็นขั้นตอนกลาง

    • จี (เครือข่ายx.MultiDiGraph) – กราฟอินพุตใน CRS เดียวกันกับ raster
    • ไฟล์พาธ (สตริงหรือpathlib.Pathหรือรายการสตริง/เส้นทาง) – เส้นทาง (หรือรายการเส้นทาง) ไปยังไฟล์แรสเตอร์ที่จะสืบค้น
    • วงดนตรี (int) – วงแรสเตอร์ใดที่จะสอบถาม
    • ซีพียู (int) – จำนวนคอร์ของ CPU ที่จะใช้หากไม่มีให้ใช้ทั้งหมดที่มีอยู่

    จี – กราฟพร้อมแอตทริบิวต์ระดับความสูงของโหนด


    ขอบคุณการสนับสนุนจาก franck34 ตอนนี้ DVF รองรับตัวเลือกในการวางรูปภาพบนเครื่องหมายหรือบนเลเยอร์ตามเส้นทางของ Leaflet ซึ่งสามารถระบุได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี วิธีที่ง่ายที่สุดคือให้ รูปภาพCircleUrl ตัวเลือกที่เป็นส่วนหนึ่งของปกติ as ล.พาธ ตัวเลือกเช่น:

    สิ่งนี้จะวางวงกลมไว้บนรูปร่างเส้นทางของคุณซึ่งเต็มไปด้วยรูปภาพที่ระบุ รูปภาพจะถูกปรับขนาดโดยอัตโนมัติเพื่อเติมพื้นที่ของรูปร่าง หากต้องการควบคุมรูปภาพที่คุณเพิ่มได้ละเอียดยิ่งขึ้น คุณสามารถระบุ a รูปร่างภาพ ตัวเลือก ซึ่งช่วยให้คุณควบคุมรูปร่างของโอเวอร์เลย์ – คุณสามารถจัดเตรียมรูปร่าง SVG พื้นฐาน เช่น a วงกลม, แ ตรง, หรือ an วงรี – และยังควบคุมขนาดของภาพและรูปแบบ ตัวอย่างด้านล่างสร้างวงกลมที่มีรัศมี 24 พิกเซล จากนั้นระบุรูปภาพผ่าน through ภาพ ตัวเลือกที่มีความกว้างและความสูง 48 พิกเซล


    คุณสมบัติแผ่นพับ

    การเพิ่มเครื่องหมายลงในแผนที่ของเรา

    ในบางช่วง เรามักจะต้องการเพิ่มเครื่องหมายลงในแผนที่ของเราเพื่อระบุบางสิ่งบางอย่าง แผ่นพับทำให้กระบวนการดีและง่ายโดยรวมฟังก์ชันเครื่องหมายที่มีตัวเลือกต่างๆ

    ในรูปแบบที่ง่ายที่สุด ต่อไปนี้เป็นรหัสเต็มเพื่อแสดงแผนที่ด้วยเครื่องหมาย with

    ความแตกต่างเพียงอย่างเดียวระหว่างรหัสนี้และรหัสแผนที่อย่างง่ายคือการเพิ่มบรรทัดเดียวที่ด้านล่างของส่วน JavaScript

    เรากำลังประกาศตัวแปรด้วยวิธี L.marker ที่จุดละติจูด -41.29042 และลองจิจูด 174.78219 จากนั้นเราก็เพิ่มสิ่งนั้นลงในแผนที่ของเราโดยเพิ่ม .addTo(map)

    และนี่คือแผนที่ของเราพร้อมด้วยเครื่องหมาย...

    การเพิ่มป๊อปอัปให้กับเครื่องหมายของเรา

    การเพิ่มเครื่องหมายอาจไม่ง่ายไปกว่านี้แล้ว แต่ก็ไม่ได้ให้ข้อมูลที่แย่มากในบริบทนี้ ท้ายที่สุด เราไม่มีข้อมูลว่าเครื่องหมายของเราชี้ไปที่อะไร อย่างไรก็ตาม เราสามารถเพิ่มบริบทนี้ในรูปแบบของป๊อปอัปซึ่งเป็นกรอบข้อความขนาดเล็กที่เกี่ยวข้องกับเครื่องหมาย ในการทำเช่นนี้ รหัสสำหรับเครื่องหมายของเราควรมีลักษณะดังนี้

    บรรทัดเพิ่มเติมของเราเชื่อมโยงป๊อปอัปกับเครื่องหมายของเราโดยใช้ .bindPopup ที่มีข้อความ <b>Te Papa</b><br>Museum of New Zealand (where the <b> tags will make the text bold and the <br> tag will insert a line break). Then we open the popup with .openPopup() .

    But wait! The coolness doesn’t end there. You can click on the marker and the popup will alternately disappear and return. If you omit the .openPopup() portion the popup won’t be open when your map loads, but if you click on the marker it will open up.

    Marker options

    As well as the standard marker functions shown thus far there are several options that can be utilised when displaying a marker. These are enabled by including an array of the appropriate options and their desired values in a section contained in curly braces after the latitude, longitude declaration. Below there is some sample code for the marker function with three different options demonstrating use for a boolean value (true / false) a string and a number.

    Drag a marker

    The draggable option is a boolean which is set to false by default, but when set to true, the marker can be repositioned by clicking on it with the mouse and moving it.

    The following is a code example

    Add a title to a marker

    The title option is a string which will be displayed in a small rectangle beside the pointer when a users mouse is hovered over the marker.

    The following is a code example

    And this is what it looks like…

    Marker with a title as hover text
    Adjust the markers transparency

    The opacity option will vary the transparency of the marker from 0 (transparent) to 1 (opaque).

    The following is a code example

    And this is what it looks like…

    Semi transparent marker

    . A copy is also in the appendices and a copy of all the files that appear in the book can be downloaded (in a zip file) when you download the book from Leanpub.

    The full code of a live example of a map incorporating a marker with a popup, draggability, a title and opacity are available from bl.ocks.org, GitHub and there is a copy of this file called marker-map-complex.html that can be downloaded (in a zip file) when you download the book from Leanpub. The online version at bl.ocks.org and GitHub both use subresource integrity to support secure CORS CORS (Cross Origin Resource Sharing) requests.

    Adding multiple markers to our map

    At some stage we will most likely want to add multiple markers to our map to pinpoint several things. While we could do this one by one following the previous example, we could also do it programmatically with an array of data.

    The following is the full code to show multiple markers on a map

    The full code of a live example of a map incorporating multiple markers is available online at bl.ocks.org or GitHub. A copy can also be downloaded (in a zip file) when you download the book from Leanpub. It’s called multiple-markers.html.

    There are two differences between this code and the code to add a single marker. Firstly we have declared an array ( planes ) which has a range of values with each row including an identifier (the first column) and latitude and longitude values.

    Secondly we include a for loop that contains our marker adding line.

    In the for loop we go from 0 to the end of the planes array ( planes.length ). For each row in our array, we add a marker where the latitude corresponds to planes[i][1] (in the planes array at row i and column 1 (remembering that the first column is 0)) and the longitude is planes[i][2] . We also add a popup to our marker with the identifier ( planes[i][0] ) before adding each marker to the map ( .addTo(map) ).

    And here’s our map complete with markers…

    Multiple markers on a map

    Adding a line to our map

    Adding a line to our map is a great way to provide an indication of a path or border. Leaflet provides the polyline function to do this

    The following is the full code to show a simple map with a line drawn with 4 lines

    The only difference between this code and the simple map code is the addition of the var polyline = section at the bottom of the JavaScript portion

    Here we are defining a path going from one lat/long point to another. We declare a variable with the L.polyline method and step through our points in the array. Then we simply add that to our map by adding .addTo(map) .

    And here’s our map complete with path…

    Obviously this hasn’t been set to follow any logical route :-).

    Adding options to our polyline

    There are a range of options that can be incorporated into our path and these are added after the array (separated by a comma) and contained in curly braces. The following is an example of the same line but with the colour changed to red, the width (weight) of the line set to 10 pixels, the opacity (transparency) set to 0.7 (on a scale of 0 (transparent) to 1 (opaque)), drawn with dashes of 20 pixels followed by a space of 15 pixels ( dashArray ) and with rounded corners where the lines join.

    And here’s our path with options…

    The full code of a live example of a map incorporating a the polyline and options is available online at bl.ocks.org or GitHub. A copy of the file (polyline-options-map) can be downloaded (in a zip file) when you download the book from Leanpub.

    Using multiple tile layers on your map

    Leaflet has a great feature that allows you to easily switch between tile layers when viewing your map. It’s built right in to leaflet.js and (as usual) it’s simple to implement.

    What we’re going to do is define the locations and appropriate attributions for two different sets of tiles and then tell leaflet to place a control on the map that allows us to switch. These different sets of tiles are referred to as ‘base layers’ and as such only one can be visible at any one time.

    The end result is a small icon in the top right hand corner that looks like this…

    And when we hover over it with our mouse it changes to show the different tile layers that we have defined for use.

    Layers control with mouse over

    There is no change to the HTML part of our code from the simple map example. The full code for this example can be found here on GitHub and a working example is here on bl.ocks.org. A copy of the file (layers-map.html) can be downloaded (in a zip file) when you download the book from Leanpub.

    The only change is in the JavaScript portion. and that looks like the following

    The first block of code sets up the links that we will use for attribution

    This just makes it easier to add later when juggling multiple layers.

    The we declare the URLs for the tiles and the attributions to display

    Again, by declaring these as variables, the process of defining the distinct layers is simplified.

    Which is what we do in the next block of code

    Declaring the layers like this is pretty handy since now we have a single variable for each layer that has all the information associated with it that is required to display the tiles for that layer.

    Now we add the map with the following lines of code

    It looks a lot like our simple map example, but in this case we have added in an option called layers and set that to the osmMap layer. This will be the initial layer that is shown on the map/ I have a note there to say that it’s a good idea to only have one of your base layers in there. That’s because if you put more than two it will load both layers when the map first loads and we don’t need to do that unnecessarily.

    The second last section of the code declares what our base layers are (there are other sorts of layers, but we’ll get to that later) and gives them appropriate text to display in the layers selection box.

    Then the last line adds the control for the baseLayers to the map

    For a fantastic way of finding different tile providers I can recommend heading to the preview page set up here.

    As I mentioned earlier, the full code for this example can be found here on GitHub and a working example is here on bl.ocks.org. A copy of the file (layers-map.html) can be downloaded (in a zip file) when you download the book from Leanpub.

    Overlaying information interactively on your map

    In the previous section we described how to declare and switch between more than one tile layer. Tile layers are described as ‘base layers’ in the sense that only one of them will be visible at a time and they will form the ‘base’ of the map.

    However, it is obvious that a really useful thing to be able to do would be to add information to our map so that different features or areas can be highlighted. These features or areas will exist on top of the base layer so that they have context. In Leaflet these can be set up as ‘overlays’ where an object or group of elements can be added to a map.

    Overlays are treated in much the same way as base layers. In the sense that they are declared and controlled using similar methods but Leaflet is clever enough to recognise that as many overlays as desired can exist on an individual base layer.

    What we aim to do is to add an overlay to one to our previous base layer switching example. The end result will be the same icon in the top right corner of the map

    But this time when we move our mouse over it, it will present an option to select ‘Interesting places’.

    And when selected it will show a series of markers with a connecting line.

    As with the base layer switching example, there is no change to the HTML part of our code from the simple map example. The full code for this example can be found here on GitHub and a working example is here on bl.ocks.org. A copy of the file (layers-map-overlays.html) can be downloaded (in a zip file) when you download the book from Leanpub.

    The only change is in the JavaScript portion. and that looks like the following

    There are only really two differences between this block of script and that for the base layers example.

    The first is where we define what our overlay will be made up of.

    Here we declare a new LayerGroup called coolPlaces ( var coolPlaces = new L.LayerGroup() ). Then we simply define a set of markers and a polyline (see the earlier sections on these two elements for a fuller description) and add them to our coolPlaces layer.

    The second change to our code is right at the end of the block of code.

    Here we declare our overlays (there is only one ( coolPlaces ), but you can add as many as you want) using var overlays = <<put overlays here>>. Then we add overlays to our layers control so that it knows to include the layer in the screen widget.

    And that’s all there is to it!

    As stated earlier, the full code for this example can be found here on GitHub (and there’s a copy in the appendices) an online example is here on bl.ocks.org and copy of the file (layers-map-overlays.html) can be downloaded (in a zip file) when you download the book from Leanpub.


    ImageOverlay

    Used to load and display a single image over specific bounds of the map. Extends Layer .

    Usage example

    Creation

    Factory คำอธิบาย
    L.imageOverlay( imageUrl, bounds, options?) Instantiates an image overlay object given the URL of the image and the geographical bounds it is tied to.

    Options

    Option Type Default คำอธิบาย
    opacity Number 1.0 The opacity of the image overlay.
    alt String '' Text for the alt attribute of the image (useful for accessibility).
    interactive Boolean เท็จ If true , the image overlay will emit mouse events when clicked or hovered.
    crossOrigin Boolean เท็จ If true, the image will have its crossOrigin attribute set to ''. This is needed if you want to access image pixel data.
    Option Type Default คำอธิบาย
    pane String 'overlayPane' By default the layer will be added to the map's overlay pane. Overriding this option will cause the layer to be placed on another pane by default.
    attribution String null String to be shown in the attribution control, describes the layer data, e.g. "© Mapbox".

    Events

    Event Data คำอธิบาย
    clickMouseEvent Fired when the user clicks (or taps) the layer.
    dblclickMouseEvent Fired when the user double-clicks (or double-taps) the layer.
    mousedownMouseEvent Fired when the user pushes the mouse button on the layer.
    mouseoverMouseEvent Fired when the mouse enters the layer.
    mouseoutMouseEvent Fired when the mouse leaves the layer.
    contextmenuMouseEvent Fired when the user right-clicks on the layer, prevents default browser context menu from showing if there are listeners on this event. Also fired on mobile when the user holds a single touch for a second (also called long press).
    Event Data คำอธิบาย
    addEvent Fired after the layer is added to a map
    removeEvent Fired after the layer is removed from a map
    Event Data คำอธิบาย
    popupopenPopupEvent Fired when a popup bound to this layer is opened
    popupclosePopupEvent Fired when a popup bound to this layer is closed
    Event Data คำอธิบาย
    tooltipopenTooltipEvent Fired when a tooltip bound to this layer is opened.
    tooltipcloseTooltipEvent Fired when a tooltip bound to this layer is closed.

    วิธีการ

    Sets the opacity of the overlay.

    Brings the layer to the top of all overlays.

    Brings the layer to the bottom of all overlays.

    Changes the URL of the image.

    Update the bounds that this ImageOverlay covers

    Get the bounds that this ImageOverlay covers

    Get the img element that represents the ImageOverlay on the map

    Adds the layer to the given map

    Removes the layer from the map it is currently active on.

    Removes the layer from the given map

    Returns the HTMLElement representing the named pane on the map. If name is omitted, returns the pane for this layer.

    Used by the attribution control , returns the attribution option.

    Binds a popup to the layer with the passed content and sets up the necessary event listeners. If a Function is passed it will receive the layer as the first argument and should return a String or HTMLElement .

    Removes the popup previously bound with bindPopup .

    Opens the bound popup at the specified latlng or at the default popup anchor if no latlng is passed.

    Closes the popup bound to this layer if it is open.

    Opens or closes the popup bound to this layer depending on its current state.

    Returns true if the popup bound to this layer is currently open.

    Sets the content of the popup bound to this layer.

    Returns the popup bound to this layer.

    Binds a tooltip to the layer with the passed content and sets up the necessary event listeners. If a Function is passed it will receive the layer as the first argument and should return a String or HTMLElement .

    Removes the tooltip previously bound with bindTooltip .

    Opens the bound tooltip at the specified latlng or at the default tooltip anchor if no latlng is passed.

    Closes the tooltip bound to this layer if it is open.

    Opens or closes the tooltip bound to this layer depending on its current state.

    Returns true if the tooltip bound to this layer is currently open.

    Sets the content of the tooltip bound to this layer.

    Returns the tooltip bound to this layer.

    Adds a listener function ( fn ) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. 'click dblclick' ).

    Adds a set of type/listener pairs, e.g.

    Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to on , you must pass the same context to off in order to remove the listener.

    Removes a set of type/listener pairs.

    Removes all listeners to all events on the object.

    Fires an event of the specified type. You can optionally provide an data object — the first argument of the listener function will contain its properties. The event can optionally be propagated to event parents.

    Returns true if a particular event type has any listeners attached to it.

    Behaves as on(…) , except the listener will only get fired once and then removed.

    Adds an event parent - an Evented that will receive propagated events

    Removes an event parent, so it will stop receiving propagated events

    An abstract class that contains options and constants shared between vector overlays (Polygon, Polyline, Circle). Do not use it directly. Extends Layer .

    Options

    Option Type Default คำอธิบาย
    stroke Boolean จริง Whether to draw stroke along the path. Set it to false to disable borders on polygons or circles.
    color String '#3388ff' Stroke color
    weight Number 3 Stroke width in pixels
    opacity Number 1.0 Stroke opacity
    lineCap String 'round' A string that defines shape to be used at the end of the stroke.
    lineJoin String 'round' A string that defines shape to be used at the corners of the stroke.
    dashArray String null A string that defines the stroke dash pattern. Doesn't work on Canvas -powered layers in some old browsers.
    dashOffset String null A string that defines the distance into the dash pattern to start the dash. Doesn't work on Canvas -powered layers in some old browsers.
    fill Boolean depends Whether to fill the path with color. Set it to false to disable filling on polygons or circles.
    fillColor String * Fill color. Defaults to the value of the color option
    fillOpacity Number 0.2 Fill opacity.
    fillRule String ɾvenodd' A string that defines how the inside of a shape is determined.
    renderer Renderer Use this specific instance of Renderer for this path. Takes precedence over the map's default renderer.
    className String null Custom class name set on an element. Only for SVG renderer.
    Option Type Default คำอธิบาย
    interactive Boolean จริง If false , the layer will not emit mouse events and will act as a part of the underlying map.
    Option Type Default คำอธิบาย
    pane String 'overlayPane' By default the layer will be added to the map's overlay pane. Overriding this option will cause the layer to be placed on another pane by default.
    attribution String null String to be shown in the attribution control, describes the layer data, e.g. "© Mapbox".

    Events

    Event Data คำอธิบาย
    clickMouseEvent Fired when the user clicks (or taps) the layer.
    dblclickMouseEvent Fired when the user double-clicks (or double-taps) the layer.
    mousedownMouseEvent Fired when the user pushes the mouse button on the layer.
    mouseoverMouseEvent Fired when the mouse enters the layer.
    mouseoutMouseEvent Fired when the mouse leaves the layer.
    contextmenuMouseEvent Fired when the user right-clicks on the layer, prevents default browser context menu from showing if there are listeners on this event. Also fired on mobile when the user holds a single touch for a second (also called long press).
    Event Data คำอธิบาย
    addEvent Fired after the layer is added to a map
    removeEvent Fired after the layer is removed from a map
    Event Data คำอธิบาย
    popupopenPopupEvent Fired when a popup bound to this layer is opened
    popupclosePopupEvent Fired when a popup bound to this layer is closed
    Event Data คำอธิบาย
    tooltipopenTooltipEvent Fired when a tooltip bound to this layer is opened.
    tooltipcloseTooltipEvent Fired when a tooltip bound to this layer is closed.

    วิธีการ

    Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.

    Changes the appearance of a Path based on the options in the Path options object.

    Brings the layer to the top of all path layers.

    Brings the layer to the bottom of all path layers.

    Adds the layer to the given map

    Removes the layer from the map it is currently active on.

    Removes the layer from the given map

    Returns the HTMLElement representing the named pane on the map. If name is omitted, returns the pane for this layer.

    Used by the attribution control , returns the attribution option.

    Binds a popup to the layer with the passed content and sets up the necessary event listeners. If a Function is passed it will receive the layer as the first argument and should return a String or HTMLElement .

    Removes the popup previously bound with bindPopup .

    Opens the bound popup at the specified latlng or at the default popup anchor if no latlng is passed.

    Closes the popup bound to this layer if it is open.

    Opens or closes the popup bound to this layer depending on its current state.

    Returns true if the popup bound to this layer is currently open.

    Sets the content of the popup bound to this layer.

    Returns the popup bound to this layer.

    Binds a tooltip to the layer with the passed content and sets up the necessary event listeners. If a Function is passed it will receive the layer as the first argument and should return a String or HTMLElement .

    Removes the tooltip previously bound with bindTooltip .

    Opens the bound tooltip at the specified latlng or at the default tooltip anchor if no latlng is passed.

    Closes the tooltip bound to this layer if it is open.

    Opens or closes the tooltip bound to this layer depending on its current state.

    Returns true if the tooltip bound to this layer is currently open.

    Sets the content of the tooltip bound to this layer.

    Returns the tooltip bound to this layer.

    Adds a listener function ( fn ) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. 'click dblclick' ).

    Adds a set of type/listener pairs, e.g.

    Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to on , you must pass the same context to off in order to remove the listener.

    Removes a set of type/listener pairs.

    Removes all listeners to all events on the object.

    Fires an event of the specified type. You can optionally provide an data object — the first argument of the listener function will contain its properties. The event can optionally be propagated to event parents.

    Returns true if a particular event type has any listeners attached to it.

    Behaves as on(…) , except the listener will only get fired once and then removed.

    Adds an event parent - an Evented that will receive propagated events

    Removes an event parent, so it will stop receiving propagated events


    Vector Data file formats list in GIS

    In GIS, we require some data formats to express the geographical features, which mainly are of two types Raster and Vector data formats. These data sources also has multiple file formats in them which are often used to express the geographical features. In this post we are looking forward to see the List of Vector Data file formats in GIS. Vector considers the geographical features as geometrical shape and express them by different types of geometry.


    PosAnimation

    Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.

    Usage example

    Constructor

    Events

    Event Data คำอธิบาย
    startEvent Fired when the animation starts
    stepEvent Fired continuously during the animation.
    endEvent Fired when the animation ends.

    วิธีการ

    Run an animation of a given element to a new position, optionally setting duration in seconds ( 0.25 by default) and easing linearity factor (3rd argument of the cubic bezier curve, 0.5 by default).

    Stops the animation (if currently running).

    Adds a listener function ( fn ) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. 'click dblclick' ).

    Adds a set of type/listener pairs, e.g.

    Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to on , you must pass the same context to off in order to remove the listener.

    Removes a set of type/listener pairs.

    Removes all listeners to all events on the object.

    Fires an event of the specified type. You can optionally provide an data object — the first argument of the listener function will contain its properties. The event can optionally be propagated to event parents.

    Returns true if a particular event type has any listeners attached to it.

    Behaves as on(…) , except the listener will only get fired once and then removed.


    ดูวิดีโอ: How to make a Brochure in PowerPoint