- 소개
- 지도에 GeoJsonLayer 추가
- GeoJsonLayer 제거
- GeoJsonFeature 추가 및 제거
- GeoJsonFeature 및 속성 액세스
- GeoJsonLayer 및 GeoJsonFeature 스타일 지정
- 데모 앱 보기
소개
GeoJSON은 JSON 데이터 형식을
확장한 것으로 지리적 데이터를 나타냅니다. 이 유틸리티를 사용하면
지형지물을 GeoJSON 형식으로 저장하고 지도 위에 레이어로 렌더링할 수
있습니다. 지도에서 GeoJSON 데이터를 추가/삭제하려면
addLayerToMap()
, removeLayerFromMap()
을 각각 호출합니다. 마찬가지로
addFeature()
, removeFeature()
를 호출하고 GeoJsonFeature
객체를
전달하여 개별 지형지물을 추가하고 삭제할 수도
있습니다. 지형지물에 액세스하려면 getFeatures()
를 호출하여
레이어에 추가된 모든
GeoJsonFeature
객체의 반복 가능 항목을 가져옵니다.
또한 getDefaultPointStyle()
, getDefaultLineStringStyle()
또는
getDefaultPolygonStyle()
을 호출하고
각각에 스타일 옵션을 설정하여 지형지물을
레이어에 추가하기 전에 기본 스타일을 설정할 수 있습니다.
지형지물에서 setPointStyle()
, setLineStringStyle()
또는 setPolygonStyle()
을
호출하고 관련 스타일 객체를 전달하여
개별 GeoJsonFeature
의 스타일을
설정할 수도 있습니다.
지도에 GeoJsonLayer 추가
지도에 GeoJson 레이어를 추가하려면 먼저 GeoJsonLayer 클래스의 인스턴스를 생성합니다. GeoJsonLayer를 인스턴스화하는 방법은 두 가지가 있습니다.
JSONObject
에서 가져오려면 다음 항목이 필요합니다.
- 레이어를 렌더링할
GoogleMap
객체 - 레이어에 포함될 GeoJSON 데이터가
포함된
JSONObject
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Java
JSONObject geoJsonData = // JSONObject containing the GeoJSON data GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
로컬 GeoJSON 파일에서 가져올 경우 필요한 항목:
- 레이어를 렌더링할
GoogleMap
객체 - GeoJSON 데이터가 포함된 로컬 리소스 파일
- 로컬 리소스 파일을 여는 데 필요한
Context
객체
Kotlin
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
Java
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);
GeoJsonLayer
를 만든 후 addLayerToMap()
을 호출하여 가져온 데이터를
다음과 같이 지도에 추가합니다.
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
GeoJsonLayer 삭제
이 레이어를 추가했다고 가정해 보겠습니다.
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Java
JSONObject geoJsonData = // JSONObject containing the GeoJSON data GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
GeoJsonLayer를 지우려면 removeLayerFromMap()
을 호출합니다.
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
GeoJsonFeature 추가 및 제거
GeoJSON의 지형지물은 "feature" 유형을 가집니다. 여기에는 기하학적 구조와 속성 멤버가 포함되며 경계 상자나 ID가 들어 있기도 합니다.
GeoJsonFeature
객체를 개별적으로 만들어
GeoJsonLayer
에 추가할 수 있습니다.
0, 0 지점이 포함되고 속성에 하나의 항목이 있으며 경계 상자가 없는 지형지물을 생성했다고 가정해 보겠습니다.
Kotlin
val point = GeoJsonPoint(LatLng(0.0, 0.0)) val properties = hashMapOf("Ocean" to "South Atlantic") val pointFeature = GeoJsonFeature(point, "Origin", properties, null)
Java
GeoJsonPoint point = new GeoJsonPoint(new LatLng(0, 0)); HashMap<String, String> properties = new HashMap<>(); properties.put("Ocean", "South Atlantic"); GeoJsonFeature pointFeature = new GeoJsonFeature(point, "Origin", properties, null);
레이어에 지형지물을 추가하려면 addFeature()
를 호출하고
추가할 지형지물을 전달합니다.
Kotlin
layer.addFeature(pointFeature)
Java
layer.addFeature(pointFeature);
지형지물을 레이어에 추가한 후 삭제하려면
removeFeature()
를 호출하고 삭제할 지형지물을 전달합니다.
Kotlin
layer.removeFeature(pointFeature)
Java
layer.removeFeature(pointFeature);
GeoJsonFeature 및 속성 액세스
레이어에 추가된 모든 GeoJsonFeature에 액세스하려면
생성된 GeoJsonLayer
에서 getFeatures()
를 호출하면
됩니다. 이렇게 하면 아래와 같이 for-each 루프를 사용해
액세스할 수 있는 GeoJsonFeatures
의 반복 가능 항목이 반환됩니다.
Kotlin
for (feature in layer.features) { // Do something to the feature }
Java
for (GeoJsonFeature feature : layer.getFeatures()) { // Do something to the feature }
hasProperty()
, getProperty()
메서드를 getFeatures()
메서드와
함께 사용하여 저장된 각 지형지물에 특정 속성이 있는지
확인하고 속성이 있으면 액세스합니다.
Kotlin
if (feature.hasProperty("Ocean")) { val oceanProperty = feature.getProperty("Ocean") }
Java
if (feature.hasProperty("Ocean")) { String oceanProperty = feature.getProperty("Ocean"); }
GeoJSON 도형 클릭 이벤트
GeoJsonLayer.OnFeatureClickListener()
를 사용하여 지도의 도형 지형지물에서 클릭 이벤트를 수신 대기할 수 있습니다. 사용자가 지형지물을 클릭할 때 지형지물의 제목을
로깅하는 예시는 다음과 같습니다.
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}") }
Java
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener(new Layer.OnFeatureClickListener() { @Override public void onFeatureClick(Feature feature) { Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title")); } });
GeoJsonLayer 및 GeoJsonFeature 스타일 지정
GeoJsonLayer의 기본 스타일을 설정하거나 레이어에서 개별 지형지물의 스타일을 지정할 수 있습니다.
기본 스타일
GeoJsonLayer에서 레이어에 추가된 점, 유도선 및 다각형에 기본 스타일을 설정할 수 있습니다. 기본 스타일은 지형지물의 기하학적 구조 중 어느 한쪽에 스타일 세트가 없는 경우에만 적용됩니다. 기본 스타일을 변경하면 기본 스타일을 사용하는 모든 지형지물에 반영됩니다.
기본 스타일을 적용하는 절차는 다음과 같습니다.
- 관련 기본 스타일 객체를 가져옵니다.
GeoJsonPointStyle
,GeoJsonLineStringStyle
또는GeoJsonPolygonStyle
중 하나일 수 있습니다. - 스타일에 원하는 옵션을 적용합니다.
예를 들어 다음 코드 샘플은 기본 점 스타일을 수정하여 제목과 스니펫이 포함된 드래그 가능한 점을 만드는 방법을 보여줍니다.
Kotlin
val pointStyle = layer.defaultPointStyle pointStyle.isDraggable = true pointStyle.title = "Hello, World!" pointStyle.snippet = "I am a draggable marker"
Java
GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle(); pointStyle.setDraggable(true); pointStyle.setTitle("Hello, World!"); pointStyle.setSnippet("I am a draggable marker");
GeoJsonFeature 고유의 스타일
또는 레이어의 개별 지형지물에 스타일을 지정할 수 있습니다. GeoJsonFeature
에
스타일을 적용하는 단계는 다음과 같습니다.
- 관련 스타일 객체를 만듭니다.
이 객체는
GeoJsonPointStyle
,GeoJsonLineStringStyle
또는GeoJsonPolygonStyle
일 수 있습니다. - 스타일에 원하는 옵션을 적용합니다.
- 스타일 객체를
GeoJsonFeature
의 관련 메서드(setPointStyle()
,setLineStringStyle()
또는setPolygonStyle()
)로 전달합니다.
예를 들어 GeoJsonFeature
의 유도선 스타일을 색상이 빨간색이 되도록
맞춤설정하는 방법은 다음과 같습니다.
Kotlin
// Create a new feature containing a linestring val lineStringArray: MutableList<LatLng> = ArrayList() lineStringArray.add(LatLng(0.0, 0.0)) lineStringArray.add(LatLng(50.0, 50.0)) val lineString = GeoJsonLineString(lineStringArray) val lineStringFeature = GeoJsonFeature(lineString, null, null, null) // Set the color of the linestring to red val lineStringStyle = GeoJsonLineStringStyle() lineStringStyle.color = Color.RED // Set the style of the feature lineStringFeature.lineStringStyle = lineStringStyle
Java
// Create a new feature containing a linestring List<LatLng> lineStringArray = new ArrayList<LatLng>(); lineStringArray.add(new LatLng(0, 0)); lineStringArray.add(new LatLng(50, 50)); GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray); GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null); // Set the color of the linestring to red GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle(); lineStringStyle.setColor(Color.RED); // Set the style of the feature lineStringFeature.setLineStringStyle(lineStringStyle);
데모 앱 보기
URL에서 GeoJSON 파일을 가져오고 이 파일로 레이어를 만드는
예시는 유틸리티 라이브러리와 함께 제공되는 데모
앱에서 GeoJsonDemoActivity
를 참고하세요. 설정 가이드에서 데모 앱 실행 방법을 확인할 수 있습니다.