DOCTYPE html>GIS编程入门 [Leanpub PDeiPad/Kindle]_title><meta name="title" content="GIS编程入R�s�[Leanpub PDF/iPa(uKindle]"/><meta name="description" content="从零开始学习Python GIS编程。掌握地理空间分析、交互式制图和云计算,使用GeoPandas、Leafmap、Google Earth Engine等开源工具。适合学生、研究人员和GIS专业人士。"/><meta name="author" content="Qiusheng Wu Y><meta name="DCTERMS.title" content="GIS编程入门 Y><meta name="DCTERMS.description" content="从零开始学习Python GIS编程。掌握地理空间分析、交互式制图和云计算,使用GeoPandas、Leafmap、Google Earth Engine等开源工具。适合学生、研究人员和GIS专业人士。 Y><meta name="DCTERMS.type" content="book Y><meta name="DCTERMS.creator" content="Qiusheng Wu Y><meta name="DCTERMS.date" content="2025-12-202�4�1:46ES9Z Y><meta name="DCTERMS.language" content="zho_Hans Y><meta property="og:title" content="GIS编程入门"/><meta property="og:type" content="book Y><meta property="og:image" content="https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_hero2x751000000486&17043486 Y><meta property="og:image:width" content="64."."."/><meta property="og:image:height" content="AS."."."/><meta property="og:url" content="httpsa_/leanpub.com/gispra-zh Y><meta property="og:publisher" content="Leanpub"/><meta property="og:description" content="从零开始学习Python GIS编程。掌握地理空间分析、交互式制图和云计算,使用GeoPandas、Leafmap、Google Earth Engine等开源工具。适合学生、研究人员和GIS专业�人士。"/><meta name="twitter:card" content="summary_large_image Y><meta name="twitter:site" content="@Leanpub Y><meta name="twitter:title" content="GIS编程入门 Y><meta name="twitter:description" content="从零开始学习Python GIS编程。掌握地理空间分析、交互式制图和云计算,使用GeoPandas、Leafmap、Google Earth Engine等开源工具。适合学生、研究人员和GIS专业人士。 Y><meta name="twitter:image" content="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_herx?17043486&751000000486"/><meta name="twitter:url" content="https:]leanpub.cowgispro-zh"/><link rel="canonical" href="https:]leanpub.cowgispro-zh"/><scrip4�type="applicatiowld+json">{"@context":"https:]schema.org","@type":"Book"+"+"@id":"https:]leanpub.cowgispro-zh#book","name":"GIS编程入门"+"+"url":"https:]leanpub.cowgispro-zh"+"+"bookFormat":"httpsa_/schema.oruEBook"+"+"brand":{"@type":"Brand","name":"Leanpub"V�"description":"从零开始学习Python GIS编程。掌握地理空间分析、交互式制图和云计算,使用GeoPandas、Leafmap、Google Earth Engine等开源工具。适合学生、研究人员和GIS专业人士。","image":"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_herx?17043486\u002617043486","inLanguage":"zh-Hans"+"+"datePublished":"2026-04-05T01:36:58Z","numberOfPages":552,"author":[{"@type":"Person","name":"Qiusheng Wu"+"+"url":"https:]leanpub.cowzgiswqs"}],"publisher":{"@type":"Organization","name":"Leanpub"V�"offers":{"@type":"Offer","url":"httpsa_/leanpub.com/gispra-zh","price":0000.00","priceCurrency":"USD","availability":"https:]schema.org/InStock","shippingDetails":{"@type":"OfferShippingDetails","shippingRate":{"@type":"MonetaryAmount"+"+"value":"."."."+"+"currency":"USD"}+"+"shippingDestination":{"@type":"DefinedRegion","addressCountry":["AD"+"+"AE","AF"+"+"AG","AI"+"+"AL","AM"+"+"AO","AQ"+"+"AR","AS"+"+"AT","AU"+"+"AW","AX"+"+"AZ","BA"+"+"BB","BD"+"+"BE","BF"+"+"BG","BH"+"+"BI","BJ"+"+"BL","BM"+"+"BN","BO"+"+"BQ","BR"+"+"BS","BT"+"+"BV","BW"+"+"BY","BZ"+"+"CA","CC"+"+"CD","CF"+"+"CG","CH"+"+"CI","CK"+"+"CL","CM"+"+"CN","CO"+"+"CR","CU"+"+"CV","CW"+"+"CX","CY"+"+"CZ","DE"+"+"DJ","DK"+"+"DM","DO"+"+"DZ","EC"+"+"EE","EG"+"+"EH","ER"+"+"ES","ET"+"+"FI","FJ"+"+"FK","FM"+"+"FO","FR"+"+"GA","GB"+"+"GD","GE"+"+"GF","GG"+"+"GH","GI"+"+"GL","GM"+"+"GN","GP"+"+"GQ","GR"+"+"GS","GT"+"+"GU","GW"+"+"GY","HK"+"+"HM","HN"+"+"HR","HT"+"+"HU","ID"+"+"IE","IL"+"+"IM","IN"+"+"IO","IQ"+"+"IR","IS"+"+"IT","JE"+"+"JM","JO"+"+"JP","KE"+"+"KG","KH"+"+"KI","KM"+"+"KN","KP"+"+"KR","KW"+"+"KY","KZ"+"+"LA","LB"+"+"LC","LI"+"+"LK","LR"+"+"LS","LT"+"+"LU","LV"+"+"LY","MA"+"+"MC","MD"+"+"ME","MF"+"+"MG","MH"+"+"MK","ML"+"+"MM","MN"+"+"MO","MP"+"+"MQ","MR"+"+"MS","MT"+"+"MU","MV"+"+"MW","MX"+"+"MY","MZ"+"+"NA","NC"+"+"NE","NF"+"+"NG","NI"+"+"NL","NO"+"+"NP","NR"+"+"NU","NZ"+"+"OM","PA"+"+"PE","PF"+"+"PG","PH"+"+"PK","PL"+"+"PM","PN"+"+"PR","PS"+"+"PT","PW"+"+"PY","QA"+"+"RE","RO"+"+"RS","RU"+"+"RW","SA"+"+"SB","SC"+"+"SD","SE"+"+"SG","SH"+"+"SI","SJ"+"+"SK","SL"+"+"SM","SN"+"+"SO","SR"+"+"SS","ST"+"+"SV","SX"+"+"SY","SZ"+"+"TC","TD"+"+"TF","TG"+"+"TH","TJ"+"+"TK","TL"+"+"TM","TN"+"+"TO","TR"+"+"TT","TV"+"+"TW","TZ"+"+"UA","UG"+"+"UM","US"+"+"UY","UZ"+"+"VA","VC"+"+"VE","VG"+"+"VI","VN"+"+"VU","WF"+"+"WS","YE"+"+"YT","ZA"+"+"ZM","ZW"]}+"+"deliveryTime":{"@type":"ShippingDeliveryTime","handlingTime":{"@type":"QuantitativeValue","minValue"ES+"+"maxValue":0,"unitCode":"DAY"V�"transitTime":{"@type":"QuantitativeValue"+"+"minValue":0,"maxValue"ES+"+"unitCode":"DAY"}}}+"+"hasMerchantReturnPolicy":{"@type":"MerchantReturnPolicy"+"+"applicableCountry":["AD"+"+"AE","AF"+"+"AG","AI"+"+"AL","AM"+"+"AO","AQ"+"+"AR","AS"+"+"AT","AU"+"+"AW","AX"+"+"AZ","BA"+"+"BB","BD"+"+"BE","BF"+"+"BG","BH"+"+"BI","BJ"+"+"BL","BM"+"+"BN","BO"+"+"BQ","BR"+"+"BS","BT"+"+"BV","BW"+"+"BY","BZ"+"+"CA","CC"+"+"CD","CF"+"+"CG","CH"+"+"CI","CK"+"+"CL","CM"+"+"CN","CO"+"+"CR","CU"+"+"CV","CW"+"+"CX","CY"+"+"CZ","DE"+"+"DJ","DK"+"+"DM","DO"+"+"DZ","EC"+"+"EE","EG"+"+"EH","ER"+"+"ES","ET"+"+"FI","FJ"+"+"FK","FM"+"+"FO","FR"+"+"GA","GB"+"+"GD","GE"+"+"GF","GG"+"+"GH","GI"+"+"GL","GM"+"+"GN","GP"+"+"GQ","GR"+"+"GS","GT"+"+"GU","GW"+"+"GY","HK"+"+"HM","HN"+"+"HR","HT"+"+"HU","ID"+"+"IE","IL"+"+"IM","IN"+"+"IO","IQ"+"+"IR","IS"+"+"IT","JE"+"+"JM","JO"+"+"JP","KE"+"+"KG","KH"+"+"KI","KM"+"+"KN","KP"+"+"KR","KW"+"+"KY","KZ"+"+"LA","LB"+"+"LC","LI"+"+"LK","LR"+"+"LS","LT"+"+"LU","LV"+"+"LY","MA"+"+"MC","MD"+"+"ME","MF"+"+"MG","MH"+"+"MK","ML"+"+"MM","MN"+"+"MO","MP"+"+"MQ","MR"+"+"MS","MT"+"+"MU","MV"+"+"MW","MX"+"+"MY","MZ"+"+"NA","NC"+"+"NE","NF"+"+"NG","NI"+"+"NL","NO"+"+"NP","NR"+"+"NU","NZ"+"+"OM","PA"+"+"PE","PF"+"+"PG","PH"+"+"PK","PL"+"+"PM","PN"+"+"PR","PS"+"+"PT","PW"+"+"PY","QA"+"+"RE","RO"+"+"RS","RU"+"+"RW","SA"+"+"SB","SC"+"+"SD","SE"+"+"SG","SH"+"+"SI","SJ"+"+"SK","SL"+"+"SM","SN"+"+"SO","SR"+"+"SS","ST"+"+"SV","SX"+"+"SY","SZ"+"+"TC","TD"+"+"TF","TG"+"+"TH","TJ"+"+"TK","TL"+"+"TM","TN"+"+"TO","TR"+"+"TT","TV"+"+"TW","TZ"+"+"UA","UG"+"+"UM","US"+"+"UY","UZ"+"+"VA","VC"+"+"VE","VG"+"+"VI","VN"+"+"VU","WF"+"+"WS","YE"+"+"YT","ZA"+"+"ZM","ZW"],"returnPolicyCategory":"https:]schema.org/MerchantReturnFiniteReturnWindow"+"+"merchantReturnDays":0+"+"returnFees":"httpsa_/schema.oruFreeReturn"}}}_script><link rel="stylesheet" href="/assettzroot-DvsH-ZOt.css"/><link rel="schema.DCTERMS" href="http:]purl.org/duelements/1.1."."/><scrip4�src="httpsa_/www.googletagmanager.cowgtag/js" defer="" async="" crossorigin="anonymous"></script>_head><body class="antialiased [text-rendering:optimizelegibility]"><header aria-labelledby="header-heading" class="z-header sticky top-0 text-white"><  id="header-heading" class="sr-only">Leanpub Header</h2><div class="hide-scrollbar fle8�h-(--header-height) items-center justify-between overflow-x-auto overflow-y-hidden px-2 2 2 py-1.5 sm:overflow-visible sm:px(�(g)�.5 lg:px-6 bg-slate-DS."."."><  id="navigation-heading" class="sr-only">Leanpub Navigation</h2><a href="#main" class="sr-only focus:not-sr-only focus:absolute focus:z-10 focus:rounded-sm focus:bg-neutral-800 focus:p-1 focus:text-base focus:text-white focus:outline-hidden focus:ring-1 focus:ring-white focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Skip to main content_a><div class="contents sm:flex sm:flex-shrink-0 sm:items-center sm:gap-x(�(g)�"><a aria-label="Leanpub Homepage" class="relative my-auto fle8�size-12 items-center justify-center rounded-lg sm:size-auto sm:mx-2 md:px-3" href= Y" data-discover="true"><span class="sr-only">Go to Leanpub.com_span><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="leanpub" class="svg-inline--fa fa-leanpub block size-8 text-4xl" role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 575 5 2" style="width:2rem;height:2rem"><path fill="currentColor" d="M386.0009 �1.485l15.096(��N)�48.955-10.979-(�ё)�75c-36(�ё)�(�>y)�-.(�R)�4-.62 2 2 8.783-102.655 5 5 27.99700001.016-19(�ё)�14-66.(� T)�4-27.997-1(�e)�.657(�(g)�7.997-45.564 0-82.07 10.705-(�*h)�3.5 5 27.700000L93.�5 5 5 (�*h)�9.6c28.546-11.AS2 2 .484-18.�5 (�N)�(�ё)�26-18.�5 .100 0 73.0005 5 00.175 1(�e)�.657 42.542 2 2 27.700000(�(g)�8.271 59.000-41.(�]y)�1 98.539-42.544zM569.05 5 5 448c(�(g)�5.(�yr)�5 5 0-47.485-5(�ё)�15-70.542-15.64500004.-15.645-69.9000(�(g)�4.978-107.871-24.97800008.975 5 5 0-74.934 12.DS1-102.655 5 5 40.600000(�(g)�7.(�]y)�3-27.700000-63.68-40.(�)�3-102.657-40.60000000007.878 0-00.5 9000000000-107.8(��N)�4.978C55(�ё)�39 4(� T)�(�ё)�36000002.001 448 8.302 2 448H6.000L49.475 98.859C88.(�]y)�5 5 76.626 136.486 62 2 2 181.775 64(��N)�18.82 2 64(��N)�56.984 71.685 288 000.0950000019.016 71.685 357.17 62 2 2 394.(� g)�5 64c45.289 0 000.049 12.(�)�5 5 002.2 2 34.859L569.05 5 5 448zm-000000000068-44.741l00004.006-280.246c00000.742-00.999-67.248-.41-101.009-.41-38.428 0-74.385 (�*h)�.077-1(�e)�.657000008.702-28(�ё)�(�]y)�(�(g)�6.(�)�5-64(�ё)�2800008.702-102.657-38.7(�e)�00003.761 0-70(�ё)�67 7.4�-101.009(��N)�1.L50.298 403.259c47(�ё)��-19.485 5 5 (�R)�.89400003.485 5 005.045-0000.486000007.02 2 2 0 70.817 9.606 1(�e)�.657(��N)�9.642 2 2 .84-20.038 65.052-29.644 1(�e)�.657(�(g)�9.642 2 2 (�yr)�.1 0 87.0002 2 2 00.999 135.045000003.486z">_path></svg><strong class="ms(�(g)� hidden text-lg sm:inline md:ms-3">Leanpub_strong></a><span class="mx-4 mt-0.5 hidden max-w-full items-center gap-x0000 overflow-x-auto whitespace-nowrap tracking-wide lg:flex"><a class="flex-shrink-0 rounded-lg p(�(g)� transition bg-slate-700/80 font-semibold text-white" href="."." data-discover="true">Store</a><a class="flex-shrink-0 rounded-lg p-2 transition text-whit0uAS hover:bg-slate-70]50 hover:text-white" href= Yevents" data-discover="true">Events</a><a class="flex-shrink-0 rounded-lg p-2 transition text-whit0uAS hover:bg-slate-70]50 hover:text-white" href= Yauthors" data-discover="true">Authors</a><a class="flex-shrink-0 rounded-lg p-2 transition text-whit0uAS hover:bg-slate-70]50 hover:text-white" href= Yreaders" data-discover="true">Readers</a><a class="flex-shrink-0 rounded-lg p-2 transition text-whit0uAS hover:bg-slate-70]50 hover:text-white" href= Yorganizations" data-discover="true">Organizations</a><a class="flex-shrink-0 rounded-lg p-2 transition text-whit0uAS hover:bg-slate-70]50 hover:text-white" href= Yservices" data-discover="true">Services</a></span>_div><div class="contents sm:flex sm:mx(�(g)� sm:grow-0 sm:shrink-0 sm:justify-end sm:gap-x0000 md:gap-x-8 lg:gap-x0000"><button type="button" aria-label="Open search" aria-haspopup="dialog" aria-controls="header-mobile-search" class="relative fle8�size-12 cursor-pointer items-center justify-center rounded-lg focus:outline-hidden focus:ring-0 focus:ring-offset-."."."><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="magnifying-glass" class="svg-inline--fa fa-magnifying-glass text(�(g)�xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�"><path fill="currentColor" d="M5 5 208c0 45.9-14.9 8800000-40 (�*h)�2.7L502.5 5 457.4c(�*h)�.5 12.5 (�*h)�.5000002.8 0 4500000s-(�>y)�.8 12.5-4500000 0000030.70000076c-34.4(��N)�5.2-76.8 40-(�*h)�2.5 5 5 40C93.1 5 5 0 (�>y)�2.9 0 208S000.1 0(��N)�08 0S416 93.1 5 5 208zM20800000(�yr)�s44 144 0 1 0 0(�(g)�88 144 144 0 1 0 0(��N)�88z"></path>_svg>_button><button type="button" class="relative fle8�size-12 cursor-pointer items-center justify-center rounded-lg focus:outline-hidden focus:ring-0 focus:ring-offset-."."." aria-label="Theme: Ligh4�mode. Click for Dark mode" title="Dark mode"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="moon" class="svg-inline--fa fa-moon text(�(g)�xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 00000084 5(�*h)�"><path fill="currentColor" d="M(� g)�3.5 (�>y)�00000002 0 002.2 2 0 256S100 480 (� g)�3.5 480c0.6 0 115.5(�(g)�4.2 155.8-00000.4c5-4.9 600000-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1(��N)�.6c-96.9 0-175.5-78.8-175.5-176c0-65.8000006-(�*h)�3.1 8900000-100000000c6.10000.5 9(�ё)�-10.5 7.7-1700000s-7.3-�.9-14.3-(�*h)�.5c-6.3-.5-12.6-.8-19-.8z"></path>_svg>_button><a aria-label="Shopping cart" class="relative fle8�size-12 cursor-pointer items-center justify-center rounded-lg focus:outline-hidden focus:ring-0 focus:ring-offset-."."." href= Yshopping_cart" data-discover="true"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="cart-shopping" class="svg-inline--fa fa-cart-shopping text-2xl" role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 575 5 2"><path fill="currentColor" d="M0(��N)�4C0 10.7 10.5 5 5 0 24 0L69.5 0c(� g)� 0 41.5 (�*h)�.8 50.5 5 (�>y)�l4� 06.2 2 0 45.5(��N)�5 38.6 50.4l-41 152.3c-8.5000001.4-37 53.3-69.5 53.3l(�(g)�88.5 0 5.4(��N)�8.5c2.2 �00000 12.1 19.5(��N)�3.5 5 19.5L4880000036u3.2 2 0 24 10.5 5 5 24(��N)�4s-10.5 5 5 24(�(g)�2 2 2 24l-288.2 2 0c00004.5 5 0-6400000(�(g)�4.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5L24 48C10.7 48 0 3700000 0(��N)�4z28 464a48 48 0 1 1 95 5 0 48 48 0 1 1 -95 5 0z2�1�p36-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z">_path></svg></a><button class="hover:cursor-pointer relative flex size-(�*h)� cursor-pointer items-center justify-center rounded-lg focus:outline-hidden focus:ring-0 focus:ring-offset-0 focus:ring-1 my-auto"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars text(�(g)�xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 448 5(�*h)�"><path fill="currentColor" d="M0 96C0 78.2 2 1400000 62 2 2 (�>y)� 64l382 2 2 0c17.7 0000002 1400000000002 (�>y)�s-1400000000002-(�>y)�000002L(�>y)� 1284.2 2 (�*h)�8 0 �3.5 5 5 0 96zM0 256c0-17.7 14.3-(�>y)�000002-(�>y)�2�0�p84 0u7.5 5 5 0 (�>y)� 14.2 2 (�>y)�000002s-14.2 2 (�>y)�00002 (�>y)�00002 288c-17.5 5 5 0-(�>y)�-14.3-(�>y)�00002zM448 416c0 17.7-1400000000002-(�>y)�000002L(�>y)� 448c-17.7 000002-140000000002-(�>y)� 4.3-(�>y)�000002-(�>y)�2�0�p84 0u7.5 5 5 0 (�>y)� 14.2 2 (�>y)�000002z">_path></svg></button><span hidden="" style="position:fixed;top:1px;leftpx;widthpx;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none">_span></div></div><di6�class="fixed inset-0 z-[AS] pointer-events-none" aria-hidden="true"><div class="fixed inset-x-0 top-[var(--header-height)] bottom-[-25vh] bg-slate-950/50 transition-opacity duration-200 ease-out pointer-events-none opacity-0" aria-hidden="true"></div><di6�id="header-mobile-search" role="dialog" aria-modal="true" aria-label="Search" class="fixed inset-x-0 top-0 z-[85] bg-slate-900 transition-opacit9�duration(�(g)�00 ease-ou4�opacity-."."."><di6�class="fle8�h-(--header-height) items-center justify-end px-2.5 pointer-events-none"><di6�class="fle8�min-w-0 flex-1" aria-hidden="true" style="transform-origin:right center;transform:scaleX(0(�ё)�5) translateX(18px);opacity:0;transition:transform(��N)�20ms cubic-bezier(0.0000, 1, 0.68, 1), opacity 10ms ease-out"><form method="get" action="/store" class="w-full max-w-full pointer-events-none" aria-hidden="true" data-discover="true"><fieldse4�disabled="" class="m-0 border-0 p-."."."><di6�class="relative sticky top-1 z00000 flex w-full justify-center text-sm/6 focus:ring-2 focus:ring-white focus:ring-offset(�(g)� focus:ring-offset-blue-00 max-w-none"><label for=":R6q6l:" class="sr-only">Filter</label><select id=":R6q6l:" name="type" class="relative z-20 h-[(� T)�px] rounded-l-xl border border-slate-400 bg-blue-50 px0000 py-1.5 pr-8 text-base/6 font-medium text-slate-00 focus:border-slate-400 focus:ring-0 focus:outline-none dark:bg-zinc-AS0 dark:border-zinc-600 dark:text-white hidden sm:flex"><option value="all" selected="">All_option><option value="books">Books_option><option value="bundles">Bundles_option><option value="courses">Courses_option><option value="tracks">Tracks_option></select><input type="text" class="relative z(�(g)�0 block h-[42px] w-full border border-slate-400 bg-white/95 px0000 py-1.5 text-bas0u5 5 font-medium text-gray-DS0 focus:border-slate-400 focus:ring-0 focus:outline-none dark:bg-zinc-DS]95 dark:border-zinc-00 dark:text-white dark:placeholder-zinc-400 rounded-l-xl sm:rounded-l-none sm:border-l-0" placeholder="Search Leanpub" autoComplete="off" name="search" value=""/><button class="relative z-20 rounded-l-none rounded-r-xl px-2 r-button relative isolate disabled:hover:cursor-defaul4�hover:cursor-pointer inline-flex items-center justify-center gap-x(�(g)� rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-base/6 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing00)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sw5 5 bg-blue-00 text-white border-blue-700/9."."." type="submit"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="magnifying-glass" class="svg-inline--fa fa-magnifying-glass block -translate-y-p8�text(�(g)�xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�"><path fill="currentColor" d="M5 5 208c0 45.9-14.9 8800000-40 (�*h)�2.7L502.5 5 457.4c(�*h)�.5 12.5 (�*h)�.5000002.8 0 4500000s-(�>y)�.8 12.5-4500000 0000030.70000076c-34.4(��N)�5.2-76.8 40-(�*h)�2.5 5 5 40C93.1 5 5 0 (�>y)�2.9 0 208S000.1 0(��N)�08 0S416 93.1 5 5 208zM20800000(�yr)�s44 144 0 1 0 0(�(g)�88 144 144 0 1 0 0(��N)�88z"></path>_svg>_button></div></fieldset>_form></div><button type="button" aria-label="Close search" class="relative fle8�size-12 cursor-pointer items-center justify-center rounded-lg focus:outline-hidden focus:ring-0 focus:ring-offset-0 pointer-events-none"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="xmark" class="svg-inline--fa fa-xmark text(�(g)�xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 00000084 5(�*h)�"><path fill="currentColor" d="M342.5 5 150.6c(�*h)�.5-12.5 (�*h)�.500002.8 0-4500000s-(�>y)�.8-12.5-4500000 0(�N)�(��N)�10.7 86.5 5 105.4c-12.5-(�*h)�.500002.8-(�*h)�.5-45.2 2 0s-12.5 (�>y)�.8 0 45.3L146.5 5 5 255 5 .400000.4c-(�*h)�.5 12.5-(�*h)�.5000002.8 0 4500000A�U�2.8 (�*h)�.5 45.2 2 0L192 301.2 2 297.2 2 2 406.6c(�*h)�.5 12.5 (�>y)�.8 12.5 4500000 0 2.5-(�>y)�.8 0-45.3L000007.2 2 255 5 342.5 5 150.6z">_path></svg></button>_div>_div>_div>_header><na6�class="hide-scrollbar top-[calc(var(--header-height)-1px)] z(�(g)�00 h-11 w-full items-end overflow-x-auto overflow-y-hidden bg-slate-AS0 px-5 text-white sm:overflow-visible flex sticky"><di6�class="fle8�h-full w-full items-center justify-between px-1 sm:w-full sm:justify-between sm:px-4 sm:gap-x-5"><di6�class="fle8�h-full w-full flex-shrink-0 justify-between sm:hidden"><a class="line-clamp-1 flex h-full items-center overflow-hidden border-b-2 2 2 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowrap transition border-blue-500 font-semibold text-white" href="/store/books" target="_self" data-discover="true">Books</a><a class="line-clamp-1 flex h-full items-center overflow-hidden border-b-2 2 2 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowrap transition border-transparent text-whit0u75 hover:border-whit0u25 hover:text-white" href= Ystor0ubundles" target="_self" data-discover="true">Bundles_a><a class="line-clamp-1 fle8�h-full items-center overflow-hidden border-b-4 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowra0�transition border-transparen4�text-white/75 hover:border-white(�W)�5 hover:text-white" href="/store/courses" target="_self" data-discover="true">Courses</a><a class="line-clamp-1 flex h-full items-center overflow-hidden border-b-2 2 2 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowrap transition border-transparent text-whit0u75 hover:border-whit0u25 hover:text-white" href= Ystor0utracks" target="_self" data-discover="true">Tracks_a>_div><div class="hidden h-full w-auto flex-shrink-0 sm:flex sm:justify-star4�sm:gap-x-5"><a class="line-clamp-1 fle8�h-full items-center overflow-hidden border-b-4 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowra0�transition border-transparen4�text-white/75 hover:border-white(�W)�5 hover:text-white" href="."." target="_self" data-discover="true">Featured</a><a class="line-clamp-1 flex h-full items-center overflow-hidden border-b-2 2 2 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowrap transition border-transparent text-whit0u75 hover:border-whit0u25 hover:text-white" href= Ystore" target="_self" data-discover="true">All_a><a class="line-clamp-1 fle8�h-full items-center overflow-hidden border-b-4 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowra0�transition border-blue-500 font-semibold text-white" href= Ystor0ubooks" target="_self" data-discover="true">Books_a><a class="line-clamp-1 fle8�h-full items-center overflow-hidden border-b-4 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowra0�transition border-transparen4�text-white/75 hover:border-white(�W)�5 hover:text-white" href="/store/bundles" target="_self" data-discover="true">Bundles</a><a class="line-clamp-1 flex h-full items-center overflow-hidden border-b-2 2 2 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowrap transition border-transparent text-whit0u75 hover:border-whit0u25 hover:text-white" href= Ystor0ucourses" target="_self" data-discover="true">Courses_a><a class="line-clamp-1 fle8�h-full items-center overflow-hidden border-b-4 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowra0�transition border-transparen4�text-white/75 hover:border-white(�W)�5 hover:text-white" href="/store/tracks" target="_self" data-discover="true">Tracks</a></div><di6�class="h-full flex-shrink-0 gap-x-5 hidden sm:flex"><a class="line-clamp-1 fle8�h-full items-center overflow-hidden border-b-4 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowra0�transition border-transparen4�text-white/75 hover:border-white(�W)�5 hover:text-white" href="/podcasttzleanpub" target="_self" data-discover="true">Podcast_a><a class="line-clamp-1 fle8�h-full items-center overflow-hidden border-b-4 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowra0�transition border-transparen4�text-white/75 hover:border-white(�W)�5 hover:text-white" href="/launcvvleanpub" target="_self" data-discover="true">Launch</a><a class="line-clamp-1 flex h-full items-center overflow-hidden border-b-2 2 2 px-1.5 pt-0.5 pb-0.5 text-center text-sm text-ellipsis whitespace-nowrap transition border-transparent text-whit0u75 hover:border-whit0u25 hover:text-white" href= Yhelp" target="_self" data-discover="true">Help_a>_div>_div>_nav><main><header class="overflow-hidden px-2 sm:px-2 2 md:px-5 lg:bg-transparen4�lg:px-5"><di6�class="mx-auto mb-2 max-w-6xl pt-6 text-center sm:mb(�(g)� md:mb-4 lg:mb-6"><h1 lang="zh-Hans" class="text-4xl font-extrabold text-slate-900 sm:text-4xl md:text-[44px] lg:text-5xl dark:text-white">GIS编程入门_><0�class="text-lg font-medium text-slate-00 sm:text-xl md:mt-1 md:text(�(g)�xl lg:mt-1 lg:text0000xl dark:text-slate000000" lang="zh-Hans">开源地理空间工具的 Python 实用指南_p>_div><div class="mx-auto grid max-w-6xl grid-cols-1 grid-rows-[autoqfr] gap-y-2 px-0 md:grid-cols-(�*h)� md:gap-x-8 md:px-2 2 2 lg:px-6"><di6�class="relative order-2 hidden flex-col md:order-1 md:col-span-5 md:flex md:pl-0 lg:row-span(�(g)� lg:pl-6 xl:pl-8"><div class="relative z-10 mx-auto mb-[2px] fle8�w-full max-w-sm flex-col justify-center p-5 5 md:p-0 lg:mb-[2px] lg:min-w-96"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_hero751000000486&17043486" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_hero751000000486&17043486 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_herx?17043486&751000000485 5 2x" loading="eager" width=(� N)�40" height="(�>y)�."."." fetchpriority="high" class="w-full rounded-xl border border-slate(�(g)�00 shadow-md md:w-full dark:border-zinc-70."."."/><div class="mb-[2px] w-full"></div><di6�class="mb-1 flex w-full justify-center py-1 md:justify-center"><di6�class="block lg:hidden"><div class="leading-tigh4�flex flex-wrap items-center gap-x-2 gap-y-2"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-sm"><img src="https:]1�2�p9qdlcrvnra4b.cloudfront.nezavatartz(�N)�(�]y)�/tinQQiusheng_Wu_400px.jpg?1750(�R)�34" class="mr-2 h-5 5 w-5 5 rounded-full object-cover"/><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div><div class="hidden lg:block"><di6�class="leading-tight fle8�flex-wra0�items-center gap-x(�(g)� gap-y(�(g)�"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-base"><img src="httpsa_/d39qdlcrvnra4b.cloudfront.net/avatars/51927r^tiny/Qiusheng_Wu_400px.jpg750800000461" class="mr(�(g)� h-6 w-6 rounded-full object-cover Y><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></div></div><di6�class="mx-auto hidden w-full max-w-[450px] px-2 2 md:block md:px-0"><div data-slot="text" lang="zh-Hans" class="text-bas0u5 5 text-zinc-500 sm:text-sm/6 dark:text-zinc-400 [&_strong]:font-medium [&_strong]:text-zinc-950 dark:[&_strong]:text-white [&_code]:rounded-sm [&_code]:border [&_code]:border-zinc-95]10 [&_code]:bg-zinc-95]3�1�.5%] [&_code]:px-0.5 [&_code]:text-sm [&_code]:font-medium [&_code]:text-zinc-950 sm:[&_code]:text-[0.25rem] dark:[&_code]:border-whit0u20 dark:[&_code]:bg-whit0u5 dark:[&_code]:text-white relative mt(�(g)� text-left text-sm **:mb-4 [&_a]:text-blue-600 [&_strong]:font-bold"><p>用Python释放地理空间数据的力量!这本实践指南专为渴望使用开源工具探索空间分析和交互式制图的初学者和中级用户而设计。您将通过实际案例学习如何处理真实世界的数据,并在Python编程、矢量和栅格分析、网络制图以及云计算方面建立技能。无论您是学生、研究人员、GIS专业人士还是数据科学家,这本书都将为您提供自信应对地理空间挑战的工具。</p></div></div></div><di6�class="order-1 bg-white pb-8 text-center md:order-2 md:col-span-5 5 5 md:pt-0 md:text-star4�lg:bg-transparen4�lg:pt-0 lg:ltr:pl-10 xl:ltr:pl-15 5 lg:rtl:pr-10 xl:rtl:pr-15 5 dark:bg-zinc-950"><div class="mx-auto px-4 sm:px-6 md:max-w-2xl md:px-2 2 2 lg:max-w(�(g)�xl lg:px-0"><div class="mb-0 fle8�flex-col items-center md:mb-2 2 2 md:hidden"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_hero?17043486&751000000486" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_hero?17043486&751000000485 5 1x, https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_hero2x751000000486&17043486(��N)�x" loading="eager" width="24."."." height=00020" fetchpriority="high" class="mb-[2px] w-full max-w-xs rounded-xl border border-slate-200 shadow-md dark:border-zinc-700 Y><di6�class="mb-3�1�px] w-full max-w-xs"></div><di6�class="mb-2 flex w-full max-w-xs justify-center py-1"><div class="block md:hidden"><di6�class="leading-tight fle8�flex-wra0�items-center gap-x(�(g)� gap-y(�(g)�"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-sm"><img src="httpsa_/d39qdlcrvnra4b.cloudfront.net/avatars/51927r^tiny/Qiusheng_Wu_400px.jpg750800000461" class="mr(�(g)� h-6 w-6 rounded-full object-cover Y><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></div><di6�data-slot="text" lang="zh-Hans" class="text-base/6 text-zinc-500 sm:text-sw5 5 dark:text-zinc-400 [&_strong]:font-medium [&_strong]:text-zinc-950 dark:[&_strong]:text-white [&_code]:rounded-sm [&_code]:border [&_code]:border-zinc-950/10 [&_code]:bg-zinc-950/[2.5%] [&_code]:px-0.5 [&_code]:text-sm [&_code]:font-medium [&_code]:text-zinc-950 sm:[&_code]:text-[0.8(�*h)�5rem] dark:[&_code]:border-white(�W)�0 dark:[&_code]:bg-white/5 dark:[&_code]:text-white relative mx-auto mb-2 2 2 px(�(g)� text-center text-sm **:mb-4 [&_a]:text-blue-600 [&_strong]:font-bold"><p>用Python释放地理空间数据的力量!这本实践指南专为渴望使用开源工具探索空间分析和交互式制图的初学者和中级用户而设计。您将通过实际案例学习如何处理真实世界的数据,并在Python编程、矢量和栅格分析、网络制图以及云计算方面建立技能。无论您是学生、研究人员、GIS专业人士还是数据科学家,这本书都将为您提供自信应对地理空间挑战的工具。</p></div></div><di6�class="mb-2 2 [&_a]:underline"><di6�class="border-l-2 2 2 bg-yellow-50]15 border-yellow-500 dark:bg-yellow-70]30 mt-0 px0000 py-2 text-sm"><di6�class="fle8�items-start"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="circle-exclamation" class="svg-inline--fa fa-circle-exclamation my-auto text-yellow-500 dark:text-yellow000000 text-base" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�"><path fill="currentColor" d="M255 5 2A255 5 255 5 0 1 0 255 5 0a255 5 255 5 0 1 0 0 2zm0000084u3.2 2 0 24 10.5 5 5 24(��N)�4l0 �2c0 0000000-10.5 5 5 24(�(g)�2 2 2 24s-24-10.7-24(�(g)�4l0-�2c0-0000000 10.7-24(��N)�4-24zM(� g)�2 2 2 352a(�>y)�000002 0 1 1 64 0000002 (�>y)� 0 1 1 -64 0z"></path>_svg><div class="ml-5 ml-4"><di6�class="font-semibold text-yellow-800 dark:text-yellow-300 text-sm"><label>This is a book in <strong>Chinese (Simplified)_strong_label>_div>_div>_div>_div>_div><div class="text-md mb-4 [&_a]:underline">This book is a translation into Chinese (Simplified) of <a class="font-bold text-blue-500 dark:text-blue-400 hover:opacity-70 underline" href= Ygispro" data-discover="true">Introduction to GIS Programming_a> which was originall9�written in English_div><div data-hero-buy-box="true" class="w-full text-left"><di6�class="fle8�flex-col"><div class="mb-0 mb-2"><di6�class="flex"><di6�class="fle8�w-full flex-wrap justify-around gap-2 text-center sm:text-left md:justify-star4�md:gap-x-15 5 md:gap-y-4 md:max-w-full max-w-full md:max-w-lg"><di6�class="space-y(�(g)�"><div><0�class="text-sm leading-5 tracking-wider uppercase text-neutral-600">Minimum price</p></div><0�class="text-2xl font-semibold">$30.00</p></div><di6�class="space-y(�(g)�"><button class="fle8�items-center space-x-1.5" type="button" aria-expanded="false" aria-haspopup="dialog" data-state="closed"><0�class="text-sm leading-5 tracking-wider uppercase text-neutral-600">Suggested price</p><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="circle-question" class="svg-inline--fa fa-circle-question h-2 2 w-2 2 text-black" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�" width="12px" height="12px"><path fill="currentColor" d="M256 5(�*h)�(�O)�56(��N)�56 0 1 0(��N)�56 056(��N)�56 0 1 0 0 5(�*h)�zM169.8 165.3c7.9-(� g)�00000(��N)�9.1-3700000 52.8-3700000l58.2 2 0c34.9 0 63.1 2800000 63.1 00000.1c0(��N)�2.6-(�*h)�.1 43.5-.7 54.8L280 264.4c-.2 00-10.9 00000.6(�(g)�2 2 2 00000.6c-0000000 0(�(g)�4-10.7(�(g)�4-24l0-13.5c0-8.5 5 4.6-16.5 12.1-20.8l44.3-25.4c4.7(�(g)�.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-5800000 0c-3.2 2 2 0-6.2 2 2 2.1-7.5 5.3l-.2 2 2 1.2c-4.4 12.5-18(�ё)� 19-30.6 14.6s-19-18(�ё)�-14.6-30.6l.4-1.2zM22400000(�yr)�9�p2 (�>y)� 0 1 1 62 2 2 0 (�>y)�000002 0 1 1 -62 2 2 0z">_path></svg></button><p class="text(�(g)�xl font-semibold">0005.00_p>_div>_div>_div>_div><div class="w-full md:max-w-lg mt-2 mb(�(g)� fle8�flex-col gap-y0000"><section class="py-0"><input type="hidden" name="you_pay_price" value=0005"/><h2 class="text-xs tracking-wider text-black uppercase sm:text-sm dark:text-white">You pay_ ><di6�aria-hidden="true" class="relative fle8�h-(�*h)� w-full items-center" style="--lp-thumb-pct:50%"></div></section><section class="py-."."."><inpu4�type="hidden" name="author_earnings" value="28 Y><  class="text-xs tracking-wider text-black uppercase sm:text-sm dark:text-white">Author earns_ ><di6�aria-hidden="true" class="relative fle8�h-(�*h)� w-full items-center" style="--lp-thumb-pct:40%"></div></section></div><form method="post" action= Ygispro-zh" data-discover="true"><input type="hidden" name="reload-root-route" value="true"/><input type="hidden" name="timestamp" value=""/><section class="pt0000 pb-2"><label for="unitPrice" class="block tracking-wider text-black uppercase dark:text-white text-xs">Yo5�pay</label><di6�class="fle8�flex-row items-center gap-x-5 5 gap-y-3"><di6�class="relative mt-1 block rounded-md shadow-sm"><di6�class="pointer-events-none absolute inset-y-0 left-0 fle8�items-center pl-3"><span class="text-neutral-600 sm:text-sm dark:text-neutral-40.".".">$_span></div><inpu4�type="hidden" name="unitPrice" value="35 Y><inpu4�id="unitprice" aria-describedby="price-currency" type="text" inputMode="decimal" placeholder="35.0."."." class="focus:border-azure-500 focus:ring-azure-500 block w-36 rounded-lg border-neutral000000 ps-5 5 5 contrast-more:border-neutral-600 sm:text-sm md:w00005 5 dark:border-zinc-600 dark:bg-zinc-AS0 dark:text-white" value="35.0."."."/>_div>_div>_section><div class="mt-4 fle8�flex-col pb-4"><inpu4�type="hidden" name="productVariantId" value="Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdFZhcmlhbnQvNjc1OTA Y><inpu4�type="hidden" name="quantity" value="1 Y><inpu4�type="hidden" name="redirectToCart" value="true"/><input type="hidden" name="productId" value="Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNjU1MTQ Y><inpu4�type="hidden" name="productCouponId" value=" Y><inpu4�type="hidden" name="purchaseSourceId" value=""/><input type="hidden" name="purchaseSourceType" value=" Y><inpu4�type="hidden" name="purchaseSource" value=""/><div class="xs:flex-ro7�xs:justify-start fle8�flex-col gap0000"><button class="min-h-10 whitespace-nowra0�sm:text-base w-auto min-w-(�]y)� self-star4�r-button relative isolate disabled:hover:cursor-defaul4�hover:cursor-pointer inline-flex items-center justify-center gap-x(�(g)� rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-base/6 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing00)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sw5 5 bg-blue-00 text-white border-blue-700/9."."." aria-label="Add GIS编程入门 to Cart" type="submit" name="submit" value="shopping_cart">Add to Cart</button>_div><div class="xs:flex-ro7�xs:justify-start mt-2 flex flex-col gap-3"><button class="min-h-10 whitespace-nowrap sm:text-base w-auto min-w-72 self-start r-button relative isolate disabled:hover:cursor-default hover:cursor-pointer inline-fle8�items-center justify-center gap-x-2 rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline(�(g)� data-focus:outline-offset(�(g)� data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-bas0u5 5 px-[calc(--spacing00.5)-1px)] py-[calc(--spacing(�]N)�.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6 border-blue000000 text-blue-600 hover:border-blue-400 hover:bg-blue-50 focus-visible:outline-2 focus-visible:outline-offset(�(g)� focus-visible:outline-blue-00 active:text-blue-600/70 disabled:opacity-40 disabled:hover:border-blue000000 disabled:hover:bg-transparent dark:text-blue-400 dark:border-blue-500 dark:hover:border-blue-400 dark:hover:bg-blue-950" aria-label="Add GIS编程入R�s�to Wishlist" type="submit" name="submit" value="wishlist">Add to Wishlist</button>_div><p class="mt0000 text-xs leading-relaxed text-neutral-500 dark:text-neutral-400 w-auto max-w-95 5 min-w-(�]y)� self-start"><span aria-hidden="true" class="me-1.5 text-teal-0]70 dark:text-teal-40]70">✦</span>Also available for(��N)� book credits with a <a class="text-neutral-00 decoration-neutral000000 underline-offset-2 transition-colors hover:text-teal-700 hover:decoration-teal-00 dark:text-neutral-300 dark:decoration-neutral-00 dark:hover:text-teal-400 dark:hover:decoration-teal-500 underline" href= Yreadertzmembership?lp_src=credit_hint_reader" data-discover="true">Reader Membership_a>_p>_div>_form></div></div><di6�class="mb-2 2 rounded-2xl"><di6�class="m-1.5 mt-0 flex flex-wrap items-start justify-center gap-x-10 gap-y-1 text-neutral-400 sm:gap-x-6 md:justify-star4�md:gap-x-8 lg:justify-star4�lg:gap-x-1."."."><di6�class="fle8�w-fi4�flex-col items-center gap-2 px-1 py-1 text-xs font-medium"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="file-pdf" class="svg-inline--fa fa-file-pdf text0000xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�"><path fill="currentColor" d="M0 64C0(��N)�8.5 5 5 28.7 0 62 2 2 0L(� g)�2 2 2 0l0 (�*h)�8c0 17.7 14.2 2 (�>y)�000002 (�>y)�28 0 0 144(�(g)�08 0c-3500000 0-62 2 2 28.7-62 2 2 64l0 144-48 0c00005.2 2 0-64(�(g)�8.7-64-64L0 64zm382 2 2 64l-(�*h)�8 0L255 5 0 382 2 2 (�*h)�8z7600000(�yr)�2�0�p2 0c30.9 0 55 5 25.1 55 5 56s-25.1 56-56 56l-15 5 0 0 (�>y)�c0 8.8-7(�ё)� 16-16 16s-16-7.2-16-16l0-48 0-80c0-8.8 7.2-16 16-16zm(�>y)� 80c0000000 0(��N)�4-10.7(��N)�4-24s-10.7(�(g)�4-24(�(g)�4l-15 5 0 0 48 15 5 0zm96-AS2�0�p2 0c26.5 0 48 .5 48 48l0 64c0 26.5(�(g)�1.5 48-48 48l-(�>y)� 0c-8.8 0-16-7(�ё)�-16-16l0-128c0-8.8 7(�ё)�-15 5 16-16z2�1�p2 (�*h)�8c8.8 0 16-7(�ё)� 16-16l0-64c0-8.8-7.2-16-16-16l-16 0 0 95 5 16 0zmAS-1(�*h)�c0-8.8 7(�ё)�-15 5 16-16l48 0c8.8 0 15 5 7.2 16 16s-7(�ё)� 16-16 16l00002 0 0 (�>y)�000002 0c8.8 0 16 7(�ё)� 15 5 16s-7.2 16-15 5 16l-(�>y)� 0 0 48c0 8.8-7.2 16-15 5 16s-16-7(�ё)�-16-16l0-62 2 2 0-64z"></path>_svg>PDF</div><di6�class="fle8�w-fi4�flex-col items-center gap-2 px-1 py-1 text-xs font-medium"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="tablet-screen-button" class="svg-inline--fa fa-tablet-screen-button text0000xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 448 5(�*h)�"><path fill="currentColor" d="M0 64C0(��N)�8.5 5 5 28.7 0 62 2 2 0L382 2 2 0c3500000 0 62 2 2 28.7 62 2 2 64l00000084c0000005.3-28.7 64-64 64L64 5(�*h)�c-3500000 0-64-28.7-64-64L0 64zM256 4489�p2 (�>y)� 0 1 0 -64 0000002 (�>y)� 0 1 0 62 2 2 0z000084 64L64 64l0 (�>y)�0 (�>y)�0 0 0-(�>y)�0z">_path></svg>EPUB</div><di6�class="fle8�w-fi4�flex-col items-center py-1 font-medium"><div class="text-md"><span>59</span>_div><div class="text-sm"><span>Readers_span></div></div><di6�class="fle8�w-fi4�flex-col items-center py-1 font-medium"><div class="text-md"><span>5(�yr)�_span></div><di6�class="text-sm"><span>Pages</span>_div>_div>_div>_div><div class="mb0000 fle8�flex-wra0�justify-center gap(�(g)� md:justify-start"><di6�class="relative"><button class="px(�(g)� r-button relative isolate disabled:hover:cursor-default hover:cursor-pointer inline-fle8�items-center justify-center gap-x-2 rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline(�(g)� data-focus:outline-offset(�(g)� data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-bas0u5 5 px-[calc(--spacing00.5)-1px)] py-[calc(--spacing(�]N)�.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6 border-zinc-950/10 text-zinc-950 data-active:bg-zinc-95]3�1�.5%] hover:bg-zinc-950/[2.5%] dark:border-whit0u15 dark:text-white dark:[--btn-bg:transparent] dark:data-active:bg-white/5 dark:hover:bg-white/5" type="button"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="file-pdf" class="svg-inline--fa fa-file-pdf h-4 text-neutral-50."."." role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 2 2"><path fill="currentColor" d="M0 64C0 28.7(��N)�8.5 5 5 0 64 0L224 0l0 128c0 17.5 5 5 1400000000002 (�>y)�000002l(�*h)�8 0 0 144-208 0c00005.2 2 0-64(��N)�8.7-64 64l0 144-48 0c-3500000 0-64-28.7-64-64L0 64z2�1�p84 64l-128 0L256 00000084 128zM175 5 352l(�>y)� 01�1�p0.9 0 56(��N)�5.1 56 56s(�(g)�5.1 56-55 5 56l-16 0 0000002c0 8.8-7.2 16-15 5 16s-16-7(�ё)�-16-16l0-48 0-ASc0-8.8 7(�ё)�-15 5 16-16z2�1�p2 ASu3.2 2 0 24-10.5 5 5 24(�(g)�4s-10.7-24(�(g)�4-24l-16 0 0 48 16 0zm96-80l(�>y)� 06.5 0 48(��N)�1.5 48 48l0 64c0(��N)�6.5-.5 48-48 48l00002 0c-8.8 0-16-7.2-16-16l0-(�*h)�8c0-8.8 7.2-16 16-16zm(�>y)� 128c8.8 0 16-7.2 16-16l0-64c0-8.8-7(�ё)�-16-16-16l-15 5 0 0 96 15 5 0zm80-�2c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7(�ё)� 15 5 16s-7.2 16-15 5 16l-(�>y)� 0 0000002 (�>y)� 0c8.8 0 15 5 7.2 16 16s-7(�ё)� 16-16 16l00002 0 0 48c0 8.8-7(�ё)� 16-16 16s-16-7.2-16-16l0-64 0-64z">_path></svg><di6�class="text-xs font-medium">Read Free Sample_div>_button></div></div></div></div></div></header><div class="sticky top-12 2 2 z-3�1�50] md:top-[6.25rem]"><div class="md:hidden" data-headlessui-state=""><div class="relative fle8�items-center px-2 2 2 py0000 bg-whit0u95 shadow-sm dark:bg-zinc-DS]95 [@supports(backdrop-filter:blur(0))]:bg-white/80 [@supports(backdrop-filter:blur(0))]:backdrop-blur-sm dark:[@supports(backdrop-filter:blur(0))]:bg-zinc-DS]AS"><span class="ml-2 2 2 text-base font-medium text-slate-900 dark:text-white">About</span><button class="-mr-1 ml-auto fle8�h-8 w-8 items-center justify-center" aria-label="Toggle navigation menu" type="button" aria-expanded="false" data-headlessui-state=""><span class="absolute inset-."."."></span><svg aria-hidden="true" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" viewBox="0 0(��N)�2 2 2 24" class="h-6 w-6 stroke-slate-700 dark:stroke-white"><path d="5 16000000000000000005 8l00000000000000000">_path></svg></button>_div><div class="h-2 md:hidden"></div></div><span hidden="" style="position:fixed;toppx;left:1px;width:1px;heightES;paddingES;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-widthES;display:none"></span><div class="hidden md:flex md:h-14 md:justify-center md:border-b md:border-slate(�(g)�00 md:bg-white/95 dark:md:border-zinc-700 dark:md:bg-zinc-DS]95 md:[@supports(backdrop-filter:blur(0))]:bg-whit0uAS md:[@supports(backdrop-filter:blur(0))]:backdrop-blur-sm dark:md:[@supports(backdrop-filter:blur(0))]:bg-zinc-900/8."."."><di6�class="hidden flex-1 lg:block"></div><ol role="list" class="mb-[(�(g)�px] grid auta-cols-[minmax(0,13rem)] grid-flow-col text-base font-medium text-slate-DS0 [counter-reset:section] dark:text-white"><li class="flex"><a class="flex w-full flex-col items-center justify-center border-b-2 border-transparent before:text-slate-500 hover:bg-blue-5]40 hover:before:text-slate-900 dark:before:text-zinc-400 dark:hover:bg-zinc-AS0 dark:hover:before:text-white" href="/gispra-zh#about" data-discover="true"><span class="max-w-full truncate px-1">About</span>_a>_li><li class="flex"><a class="flex w-full flex-col items-center justify-center border-b-2 border-transparent before:text-slate-500 hover:bg-blue-5]40 hover:before:text-slate-900 dark:before:text-zinc-400 dark:hover:bg-zinc-AS0 dark:hover:before:text-white" href="/gispra-zh#author" data-discover="true"><span class="max-w-full truncate px-1">Author</span>_a>_li><li class="flex"><a class="flex w-full flex-col items-center justify-center border-b-2 border-transparent before:text-slate-500 hover:bg-blue-5]40 hover:before:text-slate-900 dark:before:text-zinc-400 dark:hover:bg-zinc-AS0 dark:hover:before:text-white" href="/gispra-zh#translations" data-discover="true"><span class="max-w-full truncate px-1">Translations</span>_a>_li><li class="flex"><a class="flex w-full flex-col items-center justify-center border-b-2 border-transparent before:text-slate-500 hover:bg-blue-5]40 hover:before:text-slate-900 dark:before:text-zinc-400 dark:hover:bg-zinc-AS0 dark:hover:before:text-white" href="/gispra-zh#sample" data-discover="true"><span class="max-w-full truncate px-1">Sample</span>_a>_li></ol><div class="hidden flex-1 lg:fle8�lg:justify-end lg:pe-4 xl:pe-6"><div class="relative fle8�h-full items-center transition-all duration-300 ease-out motion-reduce:transition-none invisible -translate-y-1.5 opacity-."."."><di6�class="fle8�h-full items-center gap-x-2 2 border-s border-slate-200 ps-4 dark:border-zinc-70."."."><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_hero?17043486&751000000486" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_hero?17043486&751000000485 5 1x, https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_hero2x751000000486&17043486(��N)�x" alt="" class="h-9 w-auto max-w-16 shrink-0 rounded-[4px] object-cover ring-1 ring-slate-900/10 dark:ring-whit0u10 Y><span id="nav-buy-dock-title" class="sr-only">GIS编程入门_span><button type="button" aria-expanded="false" aria-controls="nav-buy-dock-panel" aria-describedby="nav-buy-dock-title" class="group fle8�shrink-0 flex-col items-star4�rounded-md px-1 py-0.5 text-star4�focus:outline-hidden focus-visible:ring-2 focus-visible:ring-blue-50."."."><span class="font-display text-lg/6 font-bold whitespace-nowrap text-slate-DS0 tabular-nums dark:text-white">0005.00_span><span class="flex items-center gap-1 text-[�px] font-medium tracking-wide whitespace-nowra0�text-slate-500 uppercase group-hover:text-blue-600 dark:text-zinc-400 dark:group-hover:text-blue-400">Pick your price<svg aria-hidden="true" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="h0000 w0000 transition-transform duration(�(g)�00"><path d="m2 2 2 5 5 2 2 2 2 2 2 4-4"></path>_svg>_span></button><button class="whitespace-nowrap r-button relative isolate disabled:hover:cursor-default hover:cursor-pointer inline-fle8�items-center justify-center gap-x-2 rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline(�(g)� data-focus:outline-offset(�(g)� data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-sw5 5 px-[calc(--spacing00)-1px)] py-[calc(--spacing(1.5)-1px)] bg-blue-00 text-white border-blue-700/9."."." type="submit" form="nav-buy-dock-form" name="submit" value="shopping_cart" aria-describedby="nav-buy-dock-title">Add to Cart</button>_div><div id="nav-buy-dock-panel" role="region" aria-label="GIS编程入门" class="absolute end-0 top-full z-10 mt-p8�w-96 transition-all duration(�(g)�00 ease-ou4�motion-reduce:transition-none ltr:origin-top-right rtl:origin-top-left pointer-events-none invisible -translate-y-2 scale-[0.98] opacity-0"><div class="max-h-[calc(100vh-(�*h)�rem)] overflow-y-auto rounded-b-2xl border-x border-b border-slate(�(g)�00 bg-white p-5 pt-4 shadow-xl dark:border-zinc-700 dark:bg-zinc-900"><p class="mb-1 line-clamp-1 text-sm font-semibold text-slate-900 dark:text-white">GIS编程入门</p><di6�class="fle8�flex-col"><div class="mb-0 mb-2"><di6�class="flex"><di6�class="fle8�w-full flex-wrap justify-around gap-2 text-center sm:text-left md:justify-star4�md:gap-x-15 5 md:gap-y-4 md:max-w-full max-w-full md:max-w-lg"><di6�class="space-y(�(g)�"><div><0�class="text-sm leading-5 tracking-wider uppercase text-neutral-600">Minimum price</p></div><0�class="text-2xl font-semibold">$30.00</p></div><di6�class="space-y(�(g)�"><button class="fle8�items-center space-x-1.5" type="button" aria-expanded="false" aria-haspopup="dialog" data-state="closed"><0�class="text-sm leading-5 tracking-wider uppercase text-neutral-600">Suggested price</p><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="circle-question" class="svg-inline--fa fa-circle-question h-2 2 w-2 2 text-black" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�" width="12px" height="12px"><path fill="currentColor" d="M256 5(�*h)�(�O)�56(��N)�56 0 1 0(��N)�56 056(��N)�56 0 1 0 0 5(�*h)�zM169.8 165.3c7.9-(� g)�00000(��N)�9.1-3700000 52.8-3700000l58.2 2 0c34.9 0 63.1 2800000 63.1 00000.1c0(��N)�2.6-(�*h)�.1 43.5-.7 54.8L280 264.4c-.2 00-10.9 00000.6(�(g)�2 2 2 00000.6c-0000000 0(�(g)�4-10.7(�(g)�4-24l0-13.5c0-8.5 5 4.6-16.5 12.1-20.8l44.3-25.4c4.7(�(g)�.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-5800000 0c-3.2 2 2 0-6.2 2 2 2.1-7.5 5.3l-.2 2 2 1.2c-4.4 12.5-18(�ё)� 19-30.6 14.6s-19-18(�ё)�-14.6-30.6l.4-1.2zM22400000(�yr)�9�p2 (�>y)� 0 1 1 62 2 2 0 (�>y)�000002 0 1 1 -62 2 2 0z">_path></svg></button><p class="text(�(g)�xl font-semibold">0005.00_p>_div>_div>_div>_div><div class="w-full md:max-w-lg mt-2 mb(�(g)� fle8�flex-col gap-y0000"><section class="py-0"><input type="hidden" name="you_pay_price" value=0005"/><h2 class="text-xs tracking-wider text-black uppercase sm:text-sm dark:text-white">You pay_ ><di6�aria-hidden="true" class="relative fle8�h-(�*h)� w-full items-center" style="--lp-thumb-pct:50%"></div></section><section class="py-."."."><inpu4�type="hidden" name="author_earnings" value="28 Y><  class="text-xs tracking-wider text-black uppercase sm:text-sm dark:text-white">Author earns_ ><di6�aria-hidden="true" class="relative fle8�h-(�*h)� w-full items-center" style="--lp-thumb-pct:40%"></div></section></div><form method="post" action= Ygispro-zh" id="nav-buy-dock-form" data-discover="true"><inpu4�type="hidden" name="reload-root-route" value="true Y><inpu4�type="hidden" name="timestamp" value=" Y><section class="pt-2 2 pb(�(g)�"><label for="nav-buy-dock-form-unitPrice" class="block tracking-wider text-black uppercase dark:text-white text-xs">You pay_label><div class="flex flex-ro7�items-center gap-x-6 gap-y0000"><div class="relative mt-1 block rounded-md shadow-sm"><div class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl0000"><span class="text-neutral-00 sm:text-sm dark:text-neutral-400">$</span>_div><input type="hidden" name="unitPrice" value=0005"/><input id="nav-buy-dock-form-unitPrice" aria-describedby="price-currency" type="text" inputMode="decimal" placeholder=0005.00" class="focus:border-azure-500 focus:ring-azure-500 block w00005 5 rounded-lg border-neutral-300 ps-7 contrast-more:border-neutral-00 sm:text-sm md:w-36 dark:border-zinc-00 dark:bg-zinc-800 dark:text-white" value=0005.00 Y></div></div></section><di6�class="mt-2 2 2 flex flex-col pb-4"><input type="hidden" name="productVariantId" value="3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdFZhcmlhbnQvNjuOTA"/><input type="hidden" name="quantity" value="1"/><input type="hidden" name="redirectToCart" value="true Y><inpu4�type="hidden" name="productId" value="3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjgMTQ"/><input type="hidden" name="productCouponId" value=""/><input type="hidden" name="purchaseSourceId" value=" Y><inpu4�type="hidden" name="purchaseSourceType" value=""/><input type="hidden" name="purchaseSource" value=" Y><di6�class="xs:flex-row xs:justify-star4�flex flex-col gap-3"><button class="min-h-10 whitespace-nowrap sm:text-base w-full r-button relative isolate disabled:hover:cursor-default hover:cursor-pointer inline-fle8�items-center justify-center gap-x-2 rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline(�(g)� data-focus:outline-offset(�(g)� data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-bas0u5 5 px-[calc(--spacing00.5)-1px)] py-[calc(--spacing(�]N)�.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6 bg-blue-600 text-white border-blue-70]DS" aria-label="Add GIS编程入R�s�to Cart" type="submit" name="submit" value="shopping_cart">Add to Cart_button></div><di6�class="xs:flex-row xs:justify-star4�mt(�(g)� fle8�flex-col gap0000"><button class="min-h-10 whitespace-nowra0�sm:text-base w-full r-button relative isolate disabled:hover:cursor-defaul4�hover:cursor-pointer inline-flex items-center justify-center gap-x(�(g)� rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-base/6 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing00)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sw5 5 border-blue-300 text-blue-00 hover:border-blue-400 hover:bg-blue-50 focus-visible:outline(�(g)� focus-visible:outline-offset-2 focus-visible:outline-blue-600 active:text-blue-0]70 disabled:opacity-40 disabled:hover:border-blue-300 disabled:hover:bg-transparen4�dark:text-blue-400 dark:border-blue-500 dark:hover:border-blue-400 dark:hover:bg-blue-95."."." aria-label="Add GIS编程入门 to Wishlist" type="submit" name="submit" value="wishlist">Add to Wishlist_button></div><0�class="mt-2 2 text-xs leading-relaxed text-neutral-500 dark:text-neutral-400 w-full"><span aria-hidden="true" class="me-1.5 text-teal-0]70 dark:text-teal-40]70">✦</span>Also available for(��N)� book credits with a <a class="text-neutral-00 decoration-neutral000000 underline-offset-2 transition-colors hover:text-teal-700 hover:decoration-teal-00 dark:text-neutral-300 dark:decoration-neutral-00 dark:hover:text-teal-400 dark:hover:decoration-teal-500 underline" href= Yreadertzmembership?lp_src=credit_hint_reader" data-discover="true">Reader Membership_a>_p>_div>_form></div></div></div></div></div></div></div><section class="md:scroll-mt-[9.75rem] relative pt-8 pb0000 sm:pt-10 sm:pb-16 lg:pt-15 5 scroll-mt-(�>y)� md:scroll-mt-44" id="about" aria-labelledby="about-title"><di6�class="m-auto max-w-6xl px0000.5 md:px-10 lg:px-20"><h2 class="inline-flex items-center rounded-full px-2 2 2 py-1 text-blue-600 ring-1 ring-blue-00 ring-inset"><span class="text-base font-medium tracking-tight">About_span></h2><p class="font-display mt-5 5 text-[44pxr(�*h)� font-extrabold tracking-tight text-slate-DS0 max-md:text-center sm:text-6xl dark:text-white">Abou4�the Book_p>_div><section class="relative pt-2 2 lg:pt-8"><di6�class="absolute inset-x-0 top-]2 bottom-0 [mask-image:linear-gradient(transparent,white)]">_div><div class="relative mx-auto max-w-5xl max-md:text-sm sm:px-6"><di6�class="sm:rounded-6xl pt-px"><di6�class="px-2 2 2 sm:px-10 lg:px-12"><article class="my-8"><di6�class="relative mb-12 w-full overflow-hidden pt-[56.25%] shadow-lg"><iframe title="youtube" id="ytplayer" src="httpsa_/www.youtube.com/embed/6GwMoV4LOiU" class="absolute top-0 right-0 bottom-0 left-0 h-full w-full" allowfullscreen="">_iframe></div></article><di6�class="prose dark:prose-invert prose-a:text-blue-500 max-md:prose-headings:text-center mx-auto mb-10 max-w-fulL�" lang="zh-Hans"><p><strong>图书介绍:</strong>_p><p �_p><p>《GIS 编程入门》是一本全面、实践性强的书籍,旨在帮助读者掌握使用开a�Python 包进行地理空间分析。本书适合各个层次的学习者,将地理信息系统(GIS)的复杂性分解为清晰、可操作的步骤,是学生、研究人员、专业人士和自学者掌握空间数据编程的理想选择。_p><p �_p><p>地理空间数据已成为环境科学、城市规划、公共卫生和商业分析等众多领域的关键要素。随着这类数据的体量和复杂性不断增长,对可访问工具来分析、处理和可视化地理空间数据的需求从未如此迫切。Python 凭借其丰富的库生态系统,成为处理地理空间数据的首选编程语言——然而面对广泛的库和概念,可能会让人感到不知所措。本书提供了从 Python 新手成长为自信的地理空间程序员所需的结构和清晰指导。_p><p �_p><p>本书的独特之处在于其循序渐进、以实例驱动的方法。从 Python 编程基础技能开始,您将逐步建立理解,进而掌握地理空间分析的高级技术。内容设计为交互式,配有真实世界的数据集和实践练习,让您能够立即应用所学技能。您将完成各种项目,从基础的空间数据操作到构建交互式仪表板和基于云的地理空间应用程序。_p><p �_p><p>无论您是希望自动化 GIS 工作流程、开发地理空间 Web 应用程序,还是深化空间数据科学技能,本书都将以清晰和自信的方式指导您完成整个过程。_p><p �_p><p><strong>本书适合人群:_strong></p><ul><li><strong>学生和研究人员:</strong>在地理学、环境科学、城市规划和数据科学等领域,需要在学习或研究中分析空间数据的人员。_li><li><strong>GIS 专业人士:_strong>希望扩展工具包,超越传统桌面 GIS 软件并自动化复杂工作流程的专业人员。_li><li><strong>数据科学家和分析师:</strong>处理基于位置的数据,有兴趣将地理空间分析添加到技能集中的人员。</li><li><strong>软件开发人员:</strong>有兴趣构建处理地理空间数据应用程序的开发人员。</li><li><strong>自学者和转行人员:</strong>希望进入不断增长的地理空间数据科学领域的积极初学者。_li><li><strong>政府和行业专业人士:</strong>需要在日常工作中融入空间分析的人员,从城市规划到公共卫生。</li>_ul><p> </p><p><strong>您将学到什么:</strong>_p><ul><li><strong>搭建开发环境:</strong>用于地理空间编程的工具,2�Miniconda、VS Code、Gi4�=�Google Colab。</li><li><strong>核心 Python 编程:</strong>包括数据类型、控制流、函数、类、文件处理,以及用于数据操作的 NumPy 和 Pandas 等库。</li><li><strong>地理空间编程:</strong>使用 GeoPandas、Rasterio、Leafma0�=�Geemap 等库进行矢量和栅格数据处理、地理空间分析和创建交互式可视化的实践指导。_li><li><strong>高级主题:_strong>使R�s�Google Earth Engine 进行云计算、高光谱数据分析、高性能地理空间分析,以及使用 Apache Sedona 进行分布式计算。</li>_ul><p><strong>主要特色:</strong>_p><ul><li>清晰易懂的解释和带注释的代码示例。</li><li>真实世界的真实数据集,确保实用性学习。</li><li>强化每章概念的实践练习。_li><li>常见陷阱和故障排除指导。</li><li>地理空间编程初级和高级主题的深入覆盖。</li><li>补充视频教程=�GitHub 存储库,提供额外资源和材料。</li><li>读完本书后,您将具备应对现实世界地理空间编程挑战的技能。无论您的目标是构建复杂的空间数据应用程序、自动化地理空间工作流程,还是简单地增强分析能力,本书都将给您在 Python GIS 编程领域成功所需的信心。_li></ul><p><strong>关于作者:_strong></p><p> </p><p>吴秋生博士是田纳西大学副教授和亚马逊学者。他的研究专注于地理空间数据科学,重点使用开a�Python 工具和云计算来研究环境变化。他是多个广泛使用的 Python 包的创建者,包括geemap、leafmap和geoai,致力于推进地理空间分析和可视化。吴博士将其深厚的专业知识带入本书,指导您学习和掌握 Python 地理空间编程的过程。_p>_div><div class="mt-10 border-t border-neutral-200 dark:border-neutral-700 pt-8"><div class="flex flex-col gap-5 5 md:w-full md:flex-ro7�md:flex-wrap md:items-star4�md:justify-between md:gap-x-2 md:gap-y-6"><div class="flex min-w-[10rem] flex-col gap-2 md:min-w-0 md:flex-1 md:px-1"><h2 2 class="text-xs font-semibold tracking-wide text-neutral-500 dark:text-neutral-400 uppercase">Share this book_1�6�p><di6�class="text-sm text-neutral-700 dark:text-neutral-300 [&_a]:underline"><div><div class="flex items-center justify-star4�gap-2 2 py(�(g)�"><a class="h-5 5 w-5 5 rounded-full focus:outline focus:outline-1 focus:outline-offset-4" aria-label="Share on Twitter" rel="noreferrer" href="https:]twitter.cowintent/tweet?text=GIS%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8&url=leanpub.cowgispro-zh&hashtags=undefined" target="_blank"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="x-twitter" class="svg-inline--fa fa-x-twitter h-6 w-6 text-brand-twitter" role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 2 2"><path fill="currentColor" d="000089(�ё)� 48h70.6000005.6(��N)�24(�ё)� 487 464000045L20000.70000018.6 106.5 46400005.8L200.5 5 5 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.2 2 2 (� T)�1.8h39.1.1 88h-42L364.2 2 2 (� T)�1.8z">_path></svg></a><a class="h-6 w-6 rounded-full focus:outline focus:outline-1 focus:outline-offset-4" aria-label="Share on Facebook" rel="noreferrer" href="https:]www.facebook.com/shareysharer.php?display=popup&quote=GIS%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8 on Leanpub&u=leanpub.cowgispro-zh&href=leanpub.com/gispra-zh" target="_blank"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="facebook" class="svg-inline--fa fa-facebook h-6 w-6 text-brand-facebook" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�"><path fill="currentColor" d="M2 256C2 �4.5 5 397.2 2 2 0 255 5 0S0 �4.5 5 0 256C0 375 5 (�R)�.7 476.8 194(�ё)� 504.50000034(�ё)� .42�6�56h52.8V(� g)�2.3c0-87.1000009.4-(�*h)�7.5 (�*h)�5-(�*h)�7.5c16(�ё)� 0 44.2 3.2 55.7 6.4h(�]y)�c-6-.6-16.5-1-29.6-1c-(� T)� 0-58.2 15.9-58.2 57(�ё)�2�6�56h83.6l-14.2 2 2 78(�ё)�H287V510.1C400.8 494.8 5(�*h)�0000086.9 5(�*h)�(��N)�56h0z"></path>_svg>_a>_div>_div>_div>_div><div class="flex min-w-[10rem] flex-col gap-2 md:min-w-0 md:flex-1 md:px-1"><h2 2 class="text-xs font-semibold tracking-wide text-neutral-500 dark:text-neutral-400 uppercase">Categories</h3><div class="text-sm text-neutral-700 dark:text-neutral000000 [&_a]:underline"><div class="flex flex-wrap gap0000 text-sm text-neutral-00 dark:text-neutral-40."."."><a class="text-blue-600 text-blue-500 dark:text-blue-400 hover:opacity-70 na-underlinV�I�" href="/store/books?category=python" data-discover="true">Python</a></div></div></div><di6�class="fle8�min-w-m0rem] flex-col gap(�(g)� md:min-w-0 md:flex-1 md:px-1"><1�6�p class="text-xs font-semibold tracking-wide text-neutral-500 dark:text-neutral-400 uppercase">Feedback_1�6�p><di6�class="text-sm text-neutral-700 dark:text-neutral-300 [&_a]:underline"><a class="r-button relative isolate disabled:hover:cursor-default hover:cursor-pointer inline-fle8�items-center justify-center gap-x-2 rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline(�(g)� data-focus:outline-offset(�(g)� data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-bas0u5 5 px-[calc(--spacing00.5)-1px)] py-[calc(--spacing(�]N)�.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6 border-zinc-950/10 text-zinc-950 data-active:bg-zinc-95]3�1�.5%] hover:bg-zinc-950/[2.5%] dark:border-whit0u15 dark:text-white dark:[--btn-bg:transparent] dark:data-active:bg-white/5 dark:hover:bg-white/5 na-underlinV�I�" href="/email_authoygispro-zh" data-discover="true">Email the Author_a>_div>_div>_div><div class="mt-6 text-sm text-neutral-00 dark:text-neutral-40.".".">This book is a translation into Chinese (Simplified) of <a class="font-bold text-blue-500 dark:text-blue-400 hover:opacity-70 underline" href="/gispro" data-discover="true">Introduction to GIS Programming</a �which was originally written in English</div></div></div></div></div></section></section><section class="relative pt-8 pb-2 2 sm:pt-10 sm:pb-15 5 lg:pt-16 scroll-mt00002 md:scroll-mt-44" id="author" aria-labelledby="author-title"><div class="m-auto max-w-6xl px-3.5 md:px-10 lg:px(�(g)�."."."><  class="inline-fle8�items-center rounded-full px-4 py-1 text-blue-00 ring-1 ring-blue-600 ring-inset"><span class="text-base font-medium tracking-tight">Author_span></h2><p class="font-display mt-5 5 text-[44pxr(�*h)� font-extrabold tracking-tight text-slate-DS0 max-md:text-center sm:text-6xl dark:text-white">Abou4�the Author_p>_div><div class="absolute inset-x-0 top-1(�W)� bottom-0 text-slate-900/10 [mask-image:linear-gradient(transparent,white)]"></div><di6�class="space-y(�(g)�2 2 2 max-md:mt-16"><div class="relative mx-auto max-w-5xl pt-8 sm:px-5 5 lg:mt-(�*h)�"><div class="sm:rounded-6xl bg-slate-50 pt-px dark:bg-zinc-AS."."."><di6�class="relative mx-auto -mt-16 h-42 2 2 w-44 overflow-hidden rounded-full bg-slate(�(g)�00 dark:bg-zinc-700 md:float-end md:h-64 md:w-64 md:[shape-outside:circle(40%)] lg:mr-20 lg:h-(�]y)� lg:w-(�]y)�"><a aria-label="Visit Qiusheng Wu&#t7;s author profile" class="absolute inset-0 block" href= Yzgiswqs" data-discover="true"><img src="httpsa_/d39qdlcrvnra4b.cloudfront.net/avatars/51927r^full/Qiusheng_Wu_400px.jpg750800000461" class="h-full w-full object-cover Y></a></div><di6�class="p-4 max-md:mx-auto sm:px-10 md:pt(�(g)�0 md:pb-16 lg:px(�(g)�0 lg:pt-28"><a aria-label="Visit Qiusheng Wu&#t7;s author profile" class="font-displa9�mb0000 block text-[44px]/12 font-extrabold tracking-tigh4�text-blue-00 hover:opacity-70 max-md:text-center md:mb-5 md:w(�(g)�000 md:text-6xl" href="/u/giswqs" data-discover="true">Qiusheng Wu</a><di6�class="fle8�gap-x-2 2 2 max-md:justify-center"><a href="https:]twitter.cowgiswqs" aria-label="Twitter" class="focus:outline-brand-twitter rounded-full focus:outline focus:outline-1 focus:outline-offset-4" target="_blank" rel="noreferrer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="x-twitter" class="svg-inline--fa fa-x-twitter text-4xl md:text-5xl text-black dark:text-white" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 0 5(�*h)� 5(�*h)�"><path fill="currentColor" d="M389.2 48h70.6L305.5 5 (� g)�4.2 485 5 5 464H345L000003.5 5 5 8.5 5 106.5 464H35.8L200.7(��N)�75.5(��N)�6.8 48 (�]y)�.4L2(�]y)�.9 1AS.90000089(�ё)� 48z000064.4 4.81�6�p9.1L151.1 88h-(� T)�000064.4 4.8z"></path>_svg>_a><a href="httpsa_/github.cowgiswqs" aria-label="GitHub" class="focus:outline-brand-github rounded-full focus:outline focus:outline-1 focus:outline-offset-4" target="_blank" rel="noreferrer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github text-4xl md:text-5xl text-brand-github dark:text-white" role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 495 5 2"><path fill="currentColor" d="65.90000097.4c0(��N)�(�(g)�0000000000.6-5(�ё)�00000.600000000000000-5.6-100000-5.60000.6 0(�(g)�(��N)�000000000.6 5(�ё)�0000.600000-.2 2 5.5 5 1.2 2 5.5 5 3.6zm-.1-4.5c-.7(��N)� 100000 400000 400000 4.9(��N)�.6 1 5.6 0 6(�ё)�(�(g)�s-1.3-4.3-4.3-5.2c(�(g)�.6-.7-5.5.3-6.2 2.3zm44.2-1.7c(�(g)�.9.7-4.9(��N)�.6-4.6 4.900000(��N)�(��N)�.90000000000 5.9(��N)�.6(��N)�.9-.5 5 5 4.9-2.5 5 4.6-4.6-00000-1.900000000(�ё)�-5.9(�(g)�.9zM244.8 8C106.1 8 0 �3.2 2 0 252c0 �0.9 69.8(��N)�05.8 169.5(��N)�39(�ё)� 12.8 2.2 2 1700000-5.6 17.3-(�*h)�.1 0-6(�ё)�-.3-40.4-.3-.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1(�(g)�7.8-36.6 0 0(�(g)�2.9-15.7 1.6-15.2 2 2 0 0 24.9(��N)�000008.5 5 25.8(��N)�1.9 38.6 58.5 5 27.5 72.9 20.9(��N)�00000-15 5 8.8-27.1 16-0000.7-55.9-6.2-�2.3-1400000-1(�*h)�00000-110.5 0(�(g)�7.5 7.6-00000(��N)�3.6-58.9(�(g)�.6-6.5-11.1-000000000(��N)�.6-67.9 20.9-6.5 69 27 69 27(��N)�0-5.5 5 .5-8.5 62.8-8.5s(� T)�.8(��N)�.9 62.8 8.5c0 0 48.100003.5 5 69(�(g)�5 5 5 00.7000004.5 5 5 5.2 .4(��N)�.6 67.9 16 17.5 5 5 25.8000001.5 25.8 58.9 0 96.5-58.9 104.2-�4.8 �0.5 9.2 7.9 17(��N)�2.9 17 46.2 2 2 0 0000.7-.2 2 75.4-.2 2 000.6 0 6.5 4.6 14.2 2 2 1700000 12.1C(� T)�8.2 457.8 495 5 362.9 495 5 252 495 5 �3.2 2 383.5 8 244.8 8zM97.2 352.9c-100000 1-10000000000.7 5(�ё)� 1.6 1.600000.9(��N)�00000 5(�ё)� 1 100000-1 1000000000-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 10000000000(��N)�.9(��N)�0000000000.9 1.6 100000.6.7 400000-.7.7-1.3-00000(�(g)�.9(�(g)�000000000.9(�(g)�-.6-3.6-00000-400000.7zm(�>y)�.4000005.6c-1.6 100000-1 400000 100000 6(�ё)�(��N)�00000(��N)�00000 5(�ё)�(��N)�.6 6.5 1 100000-100000.7-400000-100000-6(�ё)�(�(g)�(�ё)�(�(g)�00000-5(�ё)�(�(g)�.6-6.5-1zm-11.4-14.7c-1.5 5 1-1.5 5 3.5 5 0 5.9 1.5 5 2.2 2 4.2 2 3.2 2 5.5 5 2.2 2 1.6-1.2 2 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z">_path></svg></a><a href="https:]linkedin.com/iwgiswqs" aria-label="LinkedIn" class="focus:outline-brand-linkedin rounded-full focus:outline focus:outline-1 focus:outline-offset-4" target="_blank" rel="noreferrer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin" class="svg-inline--fa fa-linkedin text-4xl md:text-5xl text-brand-linkedin dark:text-white" role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 448 2"><path fill="currentColor" d="M416000002H.94.2 2 (�>y)� 0 46.5 0 6400000p�c�000.4C0 465.5 14.2 2 480 .9 4ASH416u7.5 5 0 (�>y)�-14.5 (�>y)�00002.3V6400000c0-17.8-14.400002.3-(�>y)�00002.3z35.4 416H69V202.2h66.5V416zm00003.2-243c(�(g)�1.2 2 0-38.5-17.3-38.500008.5SAS.9 95 5 102.2 961.2 0 38.5 17.2 2 38.5000008.5 0 00000-17.2 38.500008.5 38.5zm282.1 243h-66.4V2c0-24.8-.5-56.700004.5-56.700004.5 5 0-39.9(��N)�7-39.9 54.9V6h-66.4V202.2h00000.79.2h.9c8.9-16.8 30.600004.5 (�)�.900004.5 67(�ё)� 0 79.5 5 5 4400000 79.5 5 5 101.9V6z">_path></svg></a><a href="https:]youtube.cow@giswqs" aria-label="YouTube" class="rounded-full focus:outline focus:outline-1 focus:outline-offset-4 focus:outline-[#FF0000]" target="_blank" rel="noreferrer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" class="svg-inline--fa fa-youtube text-4xl md:text-5xl text-[#FF0000] dark:text-white" role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 575 5 2"><path fill="currentColor" d="M549.655 124.0000c-6.281-00000.65-24.787-42.276-48(�ё)�84-48.597C458.781 64(��N)�88 62 2 2 288 64e17(�ё)�2 64 74.(�)�9 75.486c-00000.497 600000(� g)�-42.002 2 24.947-48.282 2 2 48.597-11.2 (� T)�.867-11.2 002.305-�.4(�*h)� 1(�>y)�0000005s0 89.000008 �.4(�*h)� 1(�>y)�0000005c6(�ё)�(��N)�3.65(��N)�4.785 5 5 .5 48.282 2 2 47.817(�ё)�2 448 288 448 288 448s170.78 0(��N)�0000000-11.486c00000.497-600000 42.003-24.1 48.284-47.8 11.2-(� T)�.867 11.2-002.305 �.4(�*h)�-1(�>y)�0000005s0-89.000008-�.4(�*h)�-1(�>y)�0000005zm000017.51 3.508V175.185l142.009 (�ё)�05-1(� T)�.739 81.201z">_path></svg></a></div><di6�class="prose dark:prose-invert prose-a:text-blue-500 mt-2 2 2 max-w-full! md:mt-16"><p>Dr. Qiusheng Wu is an Associate Professor a4�the University of Tennessee and an Amazon Scholar. His research focuses on geospatial data science, with an emphasis on using open-source Python tools and cloud computing to stud9�environmental change. He is the creator of several widely-used Python packages, including geemap, leafmap, and geoai, and is dedicated to advancing geospatial analysis and visualization. Dr. Wu's work is a cornerstone of the open-source geospatial community, and he brings his dee0�expertise to this book, guiding yo5�through the process of learning and mastering geospatial programming with Python.</p></div><section class="mt-8 flex justify-center"><a class="rounded-xs border border-1 border-neutral-400 dark:border-zinc-0."."." aria-label="Listen to Qiusheng Wu&#t7;s Leanpub podcas4�episode" href= Ypodcasts/leanpub/qiusheng-wu-03-07(�(g)�5" data-discover="true"><section class="flex w-full flex-col items-start max-w-sm"><di6�class="mx-1 mt-1 rounded-tl-sm rounded-tr-sm bg-neutral-50 dark:bg-zinc-DS0 px-8 py-5"><di6�class="fle8�items-center gap0000 text-black dark:text-white"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="microphone" class="svg-inline--fa fa-microphone text(�(g)�xl" role="img" xmlns="httpa_/www.w3.oru2000/svg" viewBox="0 00000084 5(�*h)�"><path fill="currentColor" d="M192 0C009 0 96 42 2 96 96l0 160c0 000 42 2 96 95 5 96s96-00000 96-96l0-10c0-53-00000-96-96-96zM62 2 2 6c0-0000000-10.7-24(�(g)�4-24s-24 10.7-24(��N)�4l0 40c0 89.1 66(�ё)� 1(�)�.7 1(�yr)� 174.4l0000003.6-48 0c-0000000 0(�(g)�2 2 2 10.7(�(g)�2 2 2 24 0.5 5 5 24(��N)�2 2 2 24l72 0 (�]y)� 0u3.2 2 0 24-10.5 5 5 24(�(g)�4s-10.7-24(�(g)�4-24l-48 0 000003.6c85.8-11.5 5 5 152-8500000 1(�yr)�-174.4l0-40c0-0000000-10.7-24(�(g)�4-24s-24 10.7-24(��N)�4l0 40c0 70.7-5700000 128-128 128s-(�*h)�8-5700000-128-128l0-40z">_path></svg><span class="font-display text-2xl font-bold tracking-tight">The Leanpub Podcast</span>_div>_div><div class="flex w-full items-center justify-start gap-4 px-8 py-5 text-left"><img src="https:]1�2�p9qdlcrvnra4b.cloudfront.nezavatartz(�N)�(�]y)�/tinQQiusheng_Wu_400px.jpg?1750(�R)�34" alt="" class="inline-block h-6 w-6 rounded-full"/><div><0�class="mb-1 text-xs text-neutral-600 dark:text-neutral-400 uppercase">Episode -- -->8</p><0�class="text-sm text-black dark:text-white underline">An Intervie7�with <!-- -->Qiusheng Wu_p>_div>_div>_section>_a>_section>_div>_div>_div>_div>_section><section class="relative pt-8 pb0000 sm:pt-10 sm:pb-16 lg:pt-15 5 scroll-mt-(�>y)� md:scroll-mt-44" id="translations" aria-labelledby="translations-title"><di6�class="m-auto max-w-6xl px0000.5 md:px-10 lg:px-20"><h2 class="inline-flex items-center rounded-full px-2 2 2 py-1 text-blue-600 ring-1 ring-blue-00 ring-inset"><span class="text-base font-medium tracking-tight">Translations</span>_ ><0�class="font-displa9�mt-6 text-[44px]/12 font-extrabold tracking-tigh4�text-slate-900 max-md:text-center sm:text-6xl dark:text-white">Translations</p></div><di6�class="mx-auto mt-(�*h)� fle8�w-full max-w-6xl flex-col items-center gap-15 5 px-4 text-center"><section aria-labelledby="book-translations-languages" class="flex w-full max-w-5xl flex-col gap-8"><h2 2 id="book-translations-languages" class="text-4xl font-semibold tracking-tigh4�text-slate-900 dark:text-white">Languages</h3><ul class="mx-auto grid w-full max-w-5xl justify-items-center gap-2 2 2 sm:gap-5 lg:gap-5 5 grid-cols-[repeat(auto-fit,minmax(150px,1fr))]"><li class="fle8�justify-center"><a class="grou0�flex w-full max-w-3�1�00px] flex-col items-center gap-1 text-center font-medium text-slate-800 dark:text-white transition hover:text-slate-900 hover:underline text-sm na-underlinV�I�" aria-label="Visi4�GIS编程入门" href= Ygispro-zh" data-discover="true"><div class="flex w-full justify-center"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_featured751000000486&17043486" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_featured751000000486&17043486 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_featurex?17043486&751000000485 5 2x" loading="lazy" width="24."."." height=00020" alt="Cover of GIS编程入门" class="shadow-book h-auto w-[84px] rounded-2xl object-contain transition duration(�(g)�00 ease-ou4�group-hover:scale-m.05] sm:w-[94px] lg:w-m04px]"/>_div>Chinese (Simplified)_a>_li><li class="flex justify-center"><a class="group fle8�w-full max-w-[200px] flex-col items-center gap-1 text-center font-medium text-slate-AS0 dark:text-white transition hover:text-slate-DS0 hover:underline text-sm no-underline!" aria-label="Visit Introducción a la Programación GIS" href= Ygispro-es" data-discover="true"><div class="flex w-full justify-center"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-etzs_featured75�18976&17�8976" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-etzs_featured75�18976&17�8976 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-es/s_featurex?17�8976&75�18975 5 2x" loading="lazy" width="24."."." height=00020" alt="Cover of Introducción a la Programación GIS" class="shadow-book h-auto w-[84px] rounded(�(g)�xl object-contain transition duration-200 ease-out group-hover:scale-[1.05] sm:w-[94px] lg:w-[104px] Y></div>Spanish_a>_li><li class="flex justify-center"><a class="group fle8�w-full max-w-[200px] flex-col items-center gap-1 text-center font-medium text-slate-AS0 dark:text-white transition hover:text-slate-DS0 hover:underline text-sm no-underline!" aria-label="Visit GISプログラミング入門" href= Ygispro-ja" data-discover="true"><div class="flex w-full justify-center"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-jts_featured75(�*h)�30406&17000000406" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-jts_featured75(�*h)�30406&17000000406 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ja/s_featurex?17000000406&75(�*h)�30405 5 2x" loading="lazy" width="24."."." height=00020" alt="Cover of GISプログラミング入門" class="shadow-book h-auto w-[84px] rounded(�(g)�xl object-contain transition duration-200 ease-out group-hover:scale-[1.05] sm:w-[94px] lg:w-[104px] Y></div>Japanese</a></li><li class="fle8�justify-center"><a class="grou0�flex w-full max-w-3�1�00px] flex-col items-center gap-1 text-center font-medium text-slate-800 dark:text-white transition hover:text-slate-900 hover:underline text-sm na-underlinV�I�" aria-label="Visi4�Introduction à la programmation SIG" href="/gispra-fr" data-discover="true"><di6�class="fle8�w-full justify-center"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-fr/s_featured?1725(�>y)�76&75(�*h)�000276" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-fr/s_featured?1725(�>y)�76&75(�*h)�000275 5 1x, https:]sofvawe08yqg.cloudfront.nezgispro-fys_featured2x75(�*h)�000276&1725(�>y)�76(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." alt="Cover of Introduction à la programmation SIG" class="shadow-book h-auto w-[84px] rounded-2xl object-contain transition duration(�(g)�00 ease-ou4�group-hover:scale-m.05] sm:w-[94px] lg:w-m04px]"/>_div>French_a>_li><li class="flex justify-center"><a class="group fle8�w-full max-w-[200px] flex-col items-center gap-1 text-center font-medium text-slate-AS0 dark:text-white transition hover:text-slate-DS0 hover:underline text-sm no-underline!" aria-label="Visit GIS 프로그래밍 입문" href= Ygispro-ko" data-discover="true"><div class="flex w-full justify-center"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-kws_featured75(�*h)�(�yr)�668&17252668" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-kws_featured75(�*h)�(�yr)�668&17252668 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ko/s_featurex?17252668&75(�*h)�(�yr)�668 2x" loading="lazy" width="24."."." height=00020" alt="Cover of GIS 프로그래(�입문" class="shadow-book h-auto w-[84px] rounded(�(g)�xl object-contain transition duration-200 ease-out group-hover:scale-[1.05] sm:w-[94px] lg:w-[104px] Y></div>Korean</a></li><li class="fle8�justify-center"><a class="grou0�flex w-full max-w-3�1�00px] flex-col items-center gap-1 text-center font-medium text-slate-800 dark:text-white transition hover:text-slate-900 hover:underline text-sm na-underlinV�I�" aria-label="Visi4�Introdução à Programação em SIG" href="/gispra-pt" data-discover="true"><di6�class="fle8�w-full justify-center"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-pt/s_featured?17(�>y)�99(�]y)�&750029972" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-pt/s_featured?17(�>y)�99(�]y)�&750029972 1x, https:]sofvawe08yqg.cloudfront.nezgispro-pzs_featured2x750029972&17(�>y)�99(�]y)�(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." alt="Cover of Introdução à Programação em SIG" class="shadow-book h-auto w-[84px] rounded-2xl object-contain transition duration(�(g)�00 ease-ou4�group-hover:scale-m.05] sm:w-[94px] lg:w-m04px]"/>_div>Portuguese (European)</a></li><li class="fle8�justify-center"><a class="grou0�flex w-full max-w-3�1�00px] flex-col items-center gap-1 text-center font-medium text-slate-800 dark:text-white transition hover:text-slate-900 hover:underline text-sm na-underlinV�I�" aria-label="Visi4�Pengantar Pemrograman GIS" href= Ygispro-id" data-discover="true"><div class="flex w-full justify-center"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-i(us_featured750000069(�*h)�4&17(�yr)�3624" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-i(us_featured750000069(�*h)�4&17(�yr)�3624 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-id/s_featurex?17(�yr)�3624&750000069(�*h)�2 2 2 2x" loading="lazy" width="24."."." height=00020" alt="Cover of Pengantar Pemrograman GIS" class="shadow-book h-auto w-[84px] rounded-2xl object-contain transition duration(�(g)�00 ease-ou4�group-hover:scale-m.05] sm:w-[94px] lg:w-m04px]"/>_div>Indonesian_a>_li><li class="flex justify-center"><a class="group fle8�w-full max-w-[200px] flex-col items-center gap-1 text-center font-medium text-slate-AS0 dark:text-white transition hover:text-slate-DS0 hover:underline text-sm no-underline!" aria-label="Visit Einführung in die GIS-Programmierung" href="/gispra-de" data-discover="true"><di6�class="fle8�w-full justify-center"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-de/s_featured?17(�yr)�0058&752417358" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-de/s_featured?17(�yr)�0058&752417358 1x, https:]sofvawe08yqg.cloudfront.nezgispro-d0us_featured2x752417358&17(�yr)�0058(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." alt="Cover of Einführung in die GIS-Programmierung" class="shadow-book h-auto w-[84px] rounded(�(g)�xl object-contain transition duration-200 ease-out group-hover:scale-[1.05] sm:w-[94px] lg:w-[104px] Y></div>German</a></li><li class="fle8�justify-center"><a class="grou0�flex w-full max-w-3�1�00px] flex-col items-center gap-1 text-center font-medium text-slate-800 dark:text-white transition hover:text-slate-900 hover:underline text-sm na-underlinV�I�" aria-label="Visi4�Введение в программирование ГИС" href= Ygispro-ru" data-discover="true"><div class="flex w-full justify-center"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-rzs_featured752435492&17(�yr)�0000054(�N)�" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-rzs_featured752435492&17(�yr)�0000054(�N)� 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ru/s_featurex?17(�yr)�0000054(�N)�&752435492 2x" loading="lazy" width="24."."." height=00020" alt="Cover of Введение в программирование ГИС" class="shadow-book h-auto w-[84px] rounded-2xl object-contain transition duration(�(g)�00 ease-ou4�group-hover:scale-m.05] sm:w-[94px] lg:w-m04px]"/>_div>Russian</a></li><li class="fle8�justify-center"><a class="grou0�flex w-full max-w-3�1�00px] flex-col items-center gap-1 text-center font-medium text-slate-800 dark:text-white transition hover:text-slate-900 hover:underline text-sm na-underlinV�I�" aria-label="Visi4�Introduzione alla Programmazione GIS" href="/gispra-it" data-discover="true"><di6�class="fle8�w-full justify-center"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-it/s_featured?1754852706&7548(�yr)�706" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-it/s_featured?1754852706&7548(�yr)�705 5 1x, https:]sofvawe08yqg.cloudfront.nezgispro-izs_featured2x7548(�yr)�706&1754852706(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." alt="Cover of Introduzione alla Programmazione GIS" class="shadow-book h-auto w-[84px] rounded-2xl object-contain transition duration(�(g)�00 ease-ou4�group-hover:scale-m.05] sm:w-[94px] lg:w-m04px]"/>_div>Italian</a></li><li class="fle8�justify-center"><a class="grou0�flex w-full max-w-3�1�00px] flex-col items-center gap-1 text-center font-medium text-slate-800 dark:text-white transition hover:text-slate-900 hover:underline text-sm na-underlinV�I�" aria-label="Visi4�Úvod do programování GIS" href= Ygispro-cs" data-discover="true"><div class="flex w-full justify-center"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-ctzs_featured7566�(�>y)�4&17560024" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-ctzs_featured7566�(�>y)�4&17560024 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-cs/s_featurex?17560024&7566�(�>y)�2 2 2 2x" loading="lazy" width="24."."." height=00020" alt="Cover of Úvod do programování GIS" class="shadow-book h-auto w-[84px] rounded-2xl object-contain transition duration(�(g)�00 ease-ou4�group-hover:scale-m.05] sm:w-[94px] lg:w-m04px]"/>_div>Czech</a></li>_ul></section></div></section><section id="sample" aria-label="sample-title" class="scroll-mt-7 bg-slate-00 px-4 md:scroll-mt-20"><div class="overflow-hidden lg:relative"><di6�class="relative m-auto grid max-w-6xl grid-cols-1 items-end gap-y-(�*h)� py-20 lg:static lg:grid-cols-2 lg:py-28 xl:py00002"><div><h2 id="sample-title" class="font-displa9�text-5xl font-extrabold tracking-tight text-white sm:w0000/4 sm:text-6xl md:w-r^2 2 lg:w-auto">Get the free sample chapters</h2><p class="prose-white prose-a:text-white prose mt-4">Click the buttons to ge4�the free sample in PDF or EPUB, or read the sample online here_p>_div><div class="flex w-full flex-col gap-y-4 lg:pl-16"><a href="https:]A�U�.amazonaws.com/samples.leanpub.com/gispra-zh-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SH(�O)�56&X-Amz-Credential=0XBXHW3Q9GGV69BT7E(�R)�(�mQ)�e(�e)�0705%2Fus-east-1%2FA�U�(�mQ)�Faws4_request&X-Amz-Date(�O)�(�e)�0705T(� g)�4810Z&X-Amz-Expires=8400&X-Amz-SignedHeaders=host&X-Amz-Signature=(�e)�546ae6502778792c5a�34000000017a4AS672600001f1bba7cbc4dfd865d" class="mt-2 2 2 w-auto max-w-[250px] bg-white dark:bg-zinc-800 text-blue-600 sm:relative sm:z-10 sm:mt-0 sm:flex-none r-button relative isolate disabled:hover:cursor-defaul4�hover:cursor-pointer inline-flex items-center justify-center gap-x(�(g)� rounded-lg border font-semibold focus:outline-hidden data-focus:outline data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500 disabled:opacity-50 hover:opacity-85 text-base/6 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing00)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sw5 5 border-blue-300 text-blue-00 hover:border-blue-400 hover:bg-blue-50 focus-visible:outline(�(g)� focus-visible:outline-offset-2 focus-visible:outline-blue-600 active:text-blue-0]70 disabled:opacity-40 disabled:hover:border-blue-300 disabled:hover:bg-transparen4�dark:text-blue-400 dark:border-blue-500 dark:hover:border-blue-400 dark:hover:bg-blue-950 no-underline!" target="_blank" rel="noopener noreferrer">Download Sample PDF_a>_div>_div>_div>_section><section class="relative pt-8 pb0000 sm:pt-10 sm:pb-16 lg:pt-15 5 scroll-mt-(�>y)� md:scroll-mt-44" id="also-by-authors"><di6�class="m-auto max-w-6xl px0000.5 md:px-10 lg:px-20"><h2 class="inline-flex items-center rounded-full px-2 2 2 py-1 text-blue-600 ring-1 ring-blue-00 ring-inset"><span class="text-base font-medium tracking-tight">Also by the Author</span>_ ><0�class="font-displa9�mt-6 text-[44px]/12 font-extrabold tracking-tigh4�text-slate-900 max-md:text-center sm:text-6xl dark:text-white">Also by the Author</p></div><section class="m-auto max-w-6xl px-4"><ul class="xs:pt-8 grid grid-cols-2 justify-center sm:grid-cols-2 2 sm:pt-8 md:pt-8 lg:mt-(�*h)� lg:grid-cols-2 2 2 xl:grid-cols-6"><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�Introduction to GIS Programming" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/gispro" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgispro/s_featured?1750AS(� T)�00000&750804263" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gisprws_featured750804263&1750AS(� T)�00000 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gisprws_featured2x750804263&1750AS(� T)�00000(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">Introduction to GIS Programming</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View Spatial Data Management with DuckDB" class="group/book flex flex-col gap-x-2" href= Yduckdb" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/duckdus_featured76�841&17(�)��18" srcSet="https:]sofvawe08yqg.cloudfront.nezduckdb/s_featured?17(�)��18&76�841 1x, https:]sofvawe08yqg.cloudfront.nezduckdb/s_featurex?17(�)��18&76�841 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">Spatial Data Management with DuckDB_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�GeoA!�?�with Python" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/geoai" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/geoai/s_featured?177436(�N)�28&770000069(� g)�8" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/geoai/s_featured?177436(�N)�28&770000069(� g)�8 1x, https:]sofvawe08yqg.cloudfront.nezgeoa}vs_featured2x770000069(� g)�8&177436(�N)�28(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">GeoA!�?�with Python</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View Introducción a la Programación GIS" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/gispra-es" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-es/s_featured?17�8976&75�18976" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-es/s_featured?17�8976&75�18975 5 1x, https:]sofvawe08yqg.cloudfront.nezgispro-etzs_featured2x75�18976&17�8976(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">Introducción a la Programación GIS_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�Introduction à la programmation SIG" class="group/book flex flex-col gap-x-2" href= Ygispro-fr" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-fys_featured75(�*h)�000276&1725(�>y)�76" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-fys_featured75(�*h)�000276&1725(�>y)�76 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-fr/s_featurex?1725(�>y)�76&75(�*h)�000275 5 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">Introduction à la programmation SIG</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View GeoAI con Python" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/geoai-es" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgeoai-es/s_featured?1774576767&774576767" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-etzs_featured774576767&1774576767 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-etzs_featured2x774576767&1774576767(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">GeoA!�?�con Python_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�Gestión de Datos Espaciales con DuckDB" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/duckdb-es" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/duckdb-es/s_featured?1769203500000&76(�N)�00543" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/duckdb-es/s_featured?1769203500000&76(�N)�00542 2 1x, https:]sofvawe08yqg.cloudfront.nezduckdb-etzs_featured2x76(�N)�00543&1769203500000(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">Gestión de Datos Espaciales con DuckDB</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View GeoAI avec Python" class="group/book flex flex-col gap-x-2" href= Ygeoai-fr" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-fys_featured774577890&17745778DS" srcSet="https:]sofvawe08yqg.cloudfront.nezgeoai-fr/s_featured?17745778DS&774577890 1x, https:]sofvawe08yqg.cloudfront.nezgeoai-fr/s_featurex?17745778DS&774577890 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">GeoAI avec Python_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�Pengantar Pemrograman GIS" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/gispra-id" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-id/s_featured?17(�yr)�3624&750000069(�*h)�4" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-id/s_featured?17(�yr)�3624&750000069(�*h)�2 2 2 1x, https:]sofvawe08yqg.cloudfront.nezgispro-i(us_featured2x750000069(�*h)�4&17(�yr)�3624(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">Pengantar Pemrograman GIS</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View GeoAI 与 Python" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/geoai-zh" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgeoai-zh/s_featured?1774577410&774577."."." srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-zvvs_featured7745770&1774577410 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-zvvs_featured2x7745770&1774577410(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">GeoA!�?�)�Python_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�Introdução à Programação em SIG" class="group/book flex flex-col gap-x-2" href= Ygispro-pt" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-pzs_featured750029972&17(�>y)�99(�]y)�" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-pzs_featured750029972&17(�>y)�99(�]y)� 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-pt/s_featurex?17(�>y)�99(�]y)�&750029972 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">Introdução à Programação em SIG</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View Einführung in die GIS-Programmierung" class="group/book flex flex-col gap-x-2" href= Ygispro-de" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-d0us_featured752417358&17(�yr)�0058" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-d0us_featured752417358&17(�yr)�0058 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-de/s_featurex?17(�yr)�0058&752417358 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">Einführung in die GIS-Programmierung_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�GISプログラミング入門" class="group/book flex flex-col gap-x-2" href= Ygispro-ja" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-jts_featured75(�*h)�30406&17000000406" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-jts_featured75(�*h)�30406&17000000406 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ja/s_featurex?17000000406&75(�*h)�30405 5 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">GISプログラミング入門</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View GIS 프로그래밍 입문" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/gispra-ko" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ko/s_featured?17252668&75(�*h)�(�yr)�668" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ko/s_featured?17252668&75(�*h)�(�yr)�668 1x, https:]sofvawe08yqg.cloudfront.nezgispro-kws_featured2x75(�*h)�(�yr)�668&17252668(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">GIS 프로그래(�입문_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�GeoA!�?�com Python" class="group/book flex flex-col gap-x-2" href= Ygeoai-pt" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-pzs_featured774724989&1774(�]y)�4989" srcSet="https:]sofvawe08yqg.cloudfront.nezgeoai-pt/s_featured?1774(�]y)�4989&774724989 1x, https:]sofvawe08yqg.cloudfront.nezgeoai-pt/s_featurex?1774(�]y)�4989&774724989 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">GeoAI com Python</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View Введение в программирование ГИС" class="group/book flex flex-col gap-x-2" href= Ygispro-ru" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezgispro-rzs_featured752435492&17(�yr)�0000054(�N)�" srcSet="https:]sofvawe08yqg.cloudfront.nezgispro-rzs_featured752435492&17(�yr)�0000054(�N)� 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ru/s_featurex?17(�yr)�0000054(�N)�&752435492 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">Введение в программирование ГИС_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li><li class="mx-5 5 mb-6 fle8�flex-col lg:mb-7 lg:w-(�>y)�"><a aria-label="Vie7�Gestion des données spatiales avec DuckDB" class="group/book flex flex-col gap-x-2" href= Yduckdb-fr" data-discover="true"><img src="https:]sofvawe08yqg.cloudfront.nezduckdb-fys_featured76(�N)�77545&1769277545" srcSet="https:]sofvawe08yqg.cloudfront.nezduckdb-fys_featured76(�N)�77545&1769277545 1x, httpsa_/d2sofvawe08yqg.cloudfront.net/duckdb-fr/s_featurex?1769277545&76(�N)�77545 2x" loading="lazy" width="24."."." height=00020" class="mb-2 2 shadow-lg transition duration-300 ease-out group-hover/book:scale-�."."."/><p class="line-clamp0000 text-sm font-medium group-hover/book:underline">Gestion des données spatiales avec DuckDB</p></a><di6�class="w-full space-y-1 text-start"><div class="leading-tight"><span class="flex items-center whitespace-nowra0�text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visit Qiusheng Wu&#t7;s author profile" href="/u/giswqs" data-discover="true">Qiusheng Wu</a></span>_div>_div>_li><li class="mx-6 mb-5 5 flex flex-col lg:mb-5 5 5 lg:w00002"><a aria-label="View Introduzione alla Programmazione GIS" class="grou:ybook fle8�flex-col gap-x(�(g)�" href="/gispra-it" data-discover="true"><img src="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-it/s_featured?1754852706&7548(�yr)�706" srcSet="httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-it/s_featured?1754852706&7548(�yr)�705 5 1x, https:]sofvawe08yqg.cloudfront.nezgispro-izs_featured2x7548(�yr)�706&1754852706(��N)�x" loading="lazy" width=(� N)�40" height="(�>y)�."."." class="mb0000 shadow-lg transition duration000000 ease-ou4�group-hoveybook:scale-110 Y><0�class="line-clamp-2 2 text-sm font-medium group-hoveybook:underline">Introduzione alla Programmazione GIS_p>_a><div class="w-full space-y-1 text-start"><di6�class="leading-tight"><span class="fle8�items-center whitespace-nowrap text-neutral-500 text-xs"><a class="hover:underline" aria-label="Visi4�Qiusheng Wu's author profile" href= Yzgiswqs" data-discover="true">Qiusheng Wu_a>_span></div></div></li>_ul></section></section><article class="bg-blue-600 py-5" id="happiness" style="scroll-margin-block-start15px"><div class="mx-auto max-w-5xl px-4 py-5 5 5 text-center sm:px-5 5 lg:fle8�lg:items-center lg:px-8 lg:py-10"><div class="prose prose-sm md:prose-base prose-h2:text(�(g)�xl prose-h2:font-bold md:prose-h2:mb-10 md:prose-h2:text-4xl mx-auto max-w-none break-words lg:w-0 lg:flex-1 [&_span]:mx-1 prose-white [&_span]:prose-white">< >The Leanpub 60 Da9�100% Happiness Guarantee_ ><0�class="prose-white text-white [&_a]:text-white hover:[&_a]:text-white">Within <strong>0 days of purchase</strong> you can get a <strong00.�.�refund_strong �on any Leanpub purchase, in <strong>two clicks_strong>.<by><br/><a class="font-bold text-blue-500 dark:text-blue-400 hover:opacity-70 underline" href= Yrefunds" data-discover="true">See full terms...</a></p></div></div></article><article class="bg-brand-author py-5" style="scroll-margin-block-start:�5px"><di6�class="mx-auto max-w-5xl px-2 2 2 py-7 text-center sm:px-6 lg:flex lg:items-center lg:px-8 lg:py-1."."."><di6�class="prose prose-sm md:prose-base prose- :text-2xl prose- :font-bold md:prose- :mb-10 md:prose- :text-4xl mx-auto max-w-none break-words lg:w-0 lg:flex-1 [&_span]:mx-1 prose-white [&_span]:prose-white"><h2 class="prose-white [&_a]:text-white hover:[&_a]:text-white">Earn $8 on a $10 Purchase, and $16 on a (�N)�0 Purchase_ ><0�class="prose-white [&_a]:text-white hover:[&_a]:text-white">We pay <strong>80% royalties_strong �on purchases of <strong>$7.99 or more</strong>, and <strong>AS.�.�royalties minus a 50 cen4�flat fee_strong �on purchases between <strong>$0.99 and $7.98_strong>. <strong>You earn $8 on a $10 sale, and $15 5 on a $20 sale</strong>. So, if we sell <strong>5000 non-refunded copies of your book for $20_strong>, you&#t7;ll earn <strong>$80,000</strong>.<br/><by><i>(Yes, some authors have alread9�earned much more than that on Leanpub.)</i><br/><by>In fact, authors have earned <a class="font-bold text-blue-500 dark:text-blue-400 hover:opacity-70 underline" href= Yauthors" data-discover="true">over $15 million_a> writing, publishing and selling on Leanpub.<by><br/><strong><a class="font-bold text-blue-500 dark:text-blue-400 hover:opacity-70 underline" href= Yauthors" data-discover="true">Learn more about writing on Leanpub</a></strong>_p>_div>_div>_article><article class="bg-brand-comet py-5" style="scroll-margin-block-start:�5px"><di6�class="mx-auto max-w-5xl px-2 2 2 py-7 text-center sm:px-6 lg:flex lg:items-center lg:px-8 lg:py-1."."."><di6�class="prose prose-sm md:prose-base prose- :text-2xl prose- :font-bold md:prose- :mb-10 md:prose- :text-4xl mx-auto max-w-none break-words lg:w-0 lg:flex-1 [&_span]:mx-1 prose-white [&_span]:prose-white"><h2 class="prose-white">Free Updates. DRM Free.</h2><p class="prose-white">If yo5�bu9�a Leanpub book, yo5�ge4�free updates for as long as the author updates the booX�I�I� Man9�authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bough4�the book or ho7�much the9�paid (including free).<by><br/>Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats tha4�a book includes are shown at the top right corner of this page.<br/><by>Finally, Leanpub books don't have an9�DRM copy-protection nonsense, so you can easil9�read them on any supported device._p><p><a href="https:]help.leanpub.com/reader-help/what-formats-do-leanpub-books-come-in" class="text-white hover:text-white text-blue-500 dark:text-blue-400 hover:opacity-70 na-underlinV�I�" target="_blank" rel="noopener noreferrer">Learn more about Leanpub&#t7;s ebook formats and where to read them_a>_p>_div>_div>_article><article class="bg-brand-martinique py-5" style="scroll-margin-block-start15px"><div class="mx-auto max-w-5xl px-4 py-5 5 5 text-center sm:px-5 5 lg:fle8�lg:items-center lg:px-8 lg:py-10"><div class="prose prose-sm md:prose-base prose-h2:text(�(g)�xl prose-h2:font-bold md:prose-h2:mb-10 md:prose-h2:text-4xl mx-auto max-w-none break-words lg:w-0 lg:flex-1 [&_span]:mx-1 prose-white [&_span]:prose-white">< >Write and Publish on Leanpub</h2><p class="prose-white">You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!<br/><by>Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.<by><br/>Leanpub is a magical typewriter for authors: jus4�write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, yo5�can even upload your own PDF and/or EPUB files and then publish with one click!) I4�really is that easy._p><a class="text-white underline hover:text-white underline" href= Yauthors" data-discover="true">Learn more about writing on Leanpub</a></div></div></article></main><footer class="bg-slate-DS0 px-4 py-8 text-white sm:py-10 lg:px-8 lg:py-(�*h)�" aria-labelledby="footer-heading"><  id="footer-heading" class="sr-only">Footer</h2><div class="mx-auto max-w-4xl space-y-8"><section class="space-y-4" aria-describedby="footer-icon-title-section"><di6�class="fle8�flex-col items-center gap-4"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="leanpub" class="svg-inline--fa fa-leanpub text-center text-6xl text-white" role="img" xmlns="http:]www.d�m�.org(�W)�00]svg" viewBox="0 0 575 5 2"><path fill="currentColor" d="000086.539 1�.4855.095 5 248.955-10.979-.275c00006.000002-.824-71.64 8.7000-1(�e)�.657(��N)�7.997-.016-19.4-66.424(�(g)�7.997-102.657-27.997-45.562 2 2 0-(�R)�.05 5 5 10.705-100000.516(��N)�7.(�]y)�3L000.117 129.68.546-�.800 61.484-18.115 92.(� g)�6-18.115 41.172 2 0 00.836 13.175 102.655 5 5 (� T)�.544(��N)�7.(�]y)�3-28(�ё)� 59.013-.7 98.0009-(� T)�.544zM569.07 448c-25.526 0-47.485-5.5-70.5(� T)�-15.645-34000001-15.645-69.993-24.978-107.8(�(g)�4.978-38.977 0-74.0002 2 2 (�*h)�.901-1(�e)�.657 40.(�)�3-27.700000(�(g)�7.(�]y)�3-00000.68-40.600000-1(�e)�.657-40.(�)�3-37.878 0-73.561 9.00003-107.871 24.978C55.000009 442.000005 5 (�>y)�.7 448 80000000 448H6.93L49.475 98.859C88.726 76.(�)�5 5 006.485 5 64 1.775 62 2 2 8.000 62 2 2 256.982 2 2 .685(��N)�88 93.095 9.015 5 .6850000057.15 5 5 640000094(�ё)�25 64c45(�ё)�89 0 93.049 (�*h)�.626 1(�>y)�00000000004.859L569.07 448zm-43.368-44.7l-34.036(�(g)�AS(�ё)�46c-30.7(� T)�-13.999-67(�ё)�48(�(g)�1.-101.009(�(g)�1.00008.(� T)�8 0-740000085 12.077-102.655 5 5 38.7(�e)�(�(g)�8.272-26.625-64.(� g)�8-38.7(�e)�-1(�e)�.65700008.702-0000.7 0-70.265 5 5 7.1-101.009 .41L50(�ё)�98 400(�ё)�59c47.1-19.487 82.894-0000.486 135.04500003.485 5 37.604 0 70.5 5 5 9.05 5 102.655 5 5 29.644000001.84(�(g)�0.008 65.0(�yr)�(�(g)�9.642 2 2 102.657-29.644 52.151 0 87.834 13.999 005.045 0000.486z"></path>_svg><h2 2 class="text-base font-bold tracking-normal text-white" id="footer-icon-title-section">Publish Early, Publish Often_1�6�p></div></section><section class="mt-(�*h)� grid grid-cols-1 gap-8 xl:col-span-1 xl:mt-."."." aria-describedby="footer-navigation_links"><h2 2 class="sr-only" id="footer-navigation_links">Links_1�6�p><di6�class="md:grid md:grid-cols-2 2 md:gap-16"><section><h2 2 class="text-sm font-semibold tracking-wider text-white uppercase">Store</h3><hy><ul class="mt-4 space-y-14"><li><ul><li><a href="."." class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Featured_a>_li><li><a href="/store/books" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Books_a>_li><li><a href="/store/bundles" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Bundles_a>_li><li><a href="/store/courses" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Courses_a>_li><li><a href="/store/tracks" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Tracks_a>_li><li><a href="/podcasttzleanpub" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Podcast</a></li><li><a href= Yredeem" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Redeem a Token</a></li>_ul></li>_ul><br/><h2 2 class="text-sm font-semibold tracking-wider text-white uppercase">Services_1�6�p><hr/><ul class="mt-2 2 2 space-y-14"><li><ul><li><a href= Yservices/course_ai" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">CourseAI</a></li><li><a href= Yservices/global_author" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">GlobalAuthor</a></li><li><a href= Yservices/index_ai" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">IndexAI</a></li><li><a href= Yservices/marketing_packages" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Marketing Packages_a>_li><li><a href="/servicetzpublish_on_amazon" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Publish on Amazon</a></li><li><a href= Yservices/translate_ai" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">TranslateAI</a></li>_ul></li>_ul><br/><h2 2 class="text-sm font-semibold tracking-wider text-white uppercase">Events_1�6�p><hr/><ul class="mt-2 2 2 space-y-14"><li><ul><li><a href= Yevents/book_kickstart_workshop?lp_src=footer" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Book Kickstar4�Workshop_a>_li><li><a href="/eventtzghostai_workshop?lp_src=footer" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">GhostAI Workshop</a></li><li><a href= Yevents/full_day?lp_src=footer" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Full Day Workshop</a></li><li><a href= Yevents/book_bootcamp?lp_src=footer" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Book Bootcamp_a>_li><li><a href="/eventtzbook_marketing_workshop?lp_src=footer" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Book Marketing Workshop</a></li>_ul></li>_ul><br/><h2 2 class="text-sm font-semibold tracking-wider text-white uppercase">Organizations</h3><hy><ul class="mt-4 space-y-14"><li><ul><li><a href="/organizations" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Organization Memberships</a></li><li><a href= Yorganizationtzpublisher_memberships" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Publisher Memberships</a></li>_ul></li>_ul><br/>_section><section class="mt-12 md:mt-."."."><1�6�p class="text-sm font-semibold tracking-wider text-white uppercase">Authors_1�6�p><hr/><ul class="mt-2 2 2 space-y-14"><li><ul><li><a href= Yauthors" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Author Memberships_a>_li><li><a href="/authors/creat0ubook" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Create Book_a>_li><li><a href="/authors/creat0ubundle" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Create Bundle_a>_li><li><a href="/authors/creat0ucourse" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Create Course_a>_li><li><a href="/authors/creat0utrack" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Create Track_a>_li></ul>_li></ul><by><1�6�p class="text-sm font-semibold tracking-wider text-white uppercase">Author Support</h3><hy><ul class="mt-4 space-y-14"><li><ul><li><a href="https:]help.leanpub.com/ewarticles/44000050-leanpub-author-faq" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Author FAQ_a>_li><li><a href="https:]help.leanpub.com/author-help" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Author Help Center</a></li><li><a href="httpsa_/community.leanpub.com/c/authors" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Leanpub Authors Forum_a>_li><li><a href="/rea(umanual" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">The Leanpub Manual</a></li><li><a href= Yread/lfm" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">The LFM Manual</a></li><li><a href= Yread/markua" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">The Markua Manual</a></li><li><a href= Yhelp/api" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">API Docs</a></li>_ul></li>_ul><br/><h2 2 class="text-sm font-semibold tracking-wider text-white uppercase">More_1�6�p><hr/><ul class="mt-2 2 2 space-y-14"><li><ul><li><a href= Ypartner_program" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Partner Program</a></li><li><a href= Ycauses" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Causes</a></li><li><a href= Yaccessibility" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Accessibility</a></li>_ul></li>_ul><br/><h2 2 class="text-sm font-semibold tracking-wider text-white uppercase">About</h3><hy><ul class="mt-4 space-y-14"><li><ul><li><a href="/about" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">About Leanpub_a>_li><li><a href="https:]leanpub.cowblog" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Blog</a></li><li><a href= Ycontact" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Contact</a></li><li><a href= Ypress" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Press</a></li>_ul></li>_ul><br/>_section><section class="mt-12 md:mt-."."."><1�6�p class="text-sm font-semibold tracking-wider text-white uppercase">Readers_1�6�p><hr/><ul class="mt-2 2 2 space-y-14"><li><ul><li><a href= Yreadertzmembership" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Reader Memberships</a></li><li><a href= Yreadertzcredits" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Bu9�Credits</a></li><li><a href="httpsa_/help.leanpub.cowen/articletz3788293-the-leanpub-faq" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Reader FAQ_a>_li><li><a href="https:]help.leanpub.com/ew" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Hel0�Center_a>_li></ul>_li></ul><by><1�6�p class="text-sm font-semibold tracking-wider text-white uppercase">Essays</h3><hy><ul class="mt-4 space-y-14"><li><ul><li><a href="/the_most_painful_compliment" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">The Mos4�Painful Compliment (2026)</a></li><li><a href= Yleanpub_at_sixteen" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Leanpub a4�Sixteen (�]N)�(�e)�6)_a>_li><li><a href="/ai_services" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">A!�?�Services (2024)</a></li><li><a href= Yimagine_a_world" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Imagine a world... (20(� g)�)</a></li><li><a href= Ydefinition" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">The Lean Publishing Definition (�]N)�013)_a>_li><li><a href="/manifesto" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">The Lean Publishing Manifesto (2010)</a></li>_ul></li>_ul><br/><h2 2 class="text-sm font-semibold tracking-wider text-white uppercase">Legal</h3><hy><ul class="mt-4 space-y-14"><li><ul><li><a href="/terms" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Terms of Service</a></li><li><a href= Ytakedown" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring-2 focus:ring-azure-50 focus:ring-offset-2 focus:ring-offset-neutral-AS.".".">Copyright Policy</a></li><li><a href= Yprivacy" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Privac9�Policy_a>_li><li><a href="refunds" class="text-xs tracking-wider text-neutral-50 outline-hidden hover:underline focus:ring(�(g)� focus:ring-azure-50 focus:ring-offset(�(g)� focus:ring-offset-neutral-800">Refund Policy</a></li>_ul></li>_ul><br/>_section>_div>_section><section aria-labelledby="footer-copyright"><h2 2 class="sr-only" id="footer-copyright">Copyright</h3><hr class="my-20 Y><article><p class="text-center text-xs leading-2 2 2 text-neutral-100">Leanpub is copyright © 2010-<!-- --(�nj)�(�e)�6<!-- -- �<a class="text-azure-50 focus:ring-azure-50 outline-hidden focus:ring-2 focus:ring-offset-1 focus:ring-offset-neutral-AS."."." href="http:]ruboss.com.".">Ruboss Technology Corp</a>._p><p class="text-center text-xs leading-2 2 2 text-neutral-100">All rights reserved._p>_article>_section><div class="flex justify-center"><a href="https:]apps.apple.com/app/id90010?ct=footer" aria-label="Download the Leanpub app on the Ap0�Store"><img src= Yimages/app/download-on-the-app-store.svg" alt="Download Leanpub on the App Store" width="108" height="36" class="h-9 w-auto opacity-70 transition hover:opacity-10."."."/>_a>_div>_div>_footer><section class="Toastify" aria-live="polite" aria-atomic="false" aria-relevant="additions text" aria-label="Notifications Alt+T">_section><div aria-hidden="true" class="relative w-full "><di6�role="progressbar" aria-valuemin="."."." aria-valuemax="10."."." aria-valuenow="."."." class="bg-azure-500 pointer-events-none fixed bottom-0 left-0 h-[0.0000rem] w-[var(--progress)] origin-bottom-left" style="--progressES%;box-shadowES -2p8�6p8�rgba(0,0,0,0.15);transition:width (�*h)�0ms ease-out, opacit9�200ms ease-in;opacity:."."."></div></div><script>((storageKe, restoreKey) => { � if Z�window.history.state |=�!window.history.state.key) { � let key = Math.random().toString((�>y)�).slice(2); window.history.replaceState("ke9�V� ""); } tr9�{ le4�positions = JSON.parse(sessionStorage.getItem(storageKey2) |=�"{}"); � let storedY = positions[restoreKe9�|| window.history.state.key]; if (typeof storedY === "number") { � window.scrollTo(0, storedY); } (�catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })("react-router-scroll-positions", null)</script><link rel="modulepreload" href="/assettzentry.client-DiQhepnZ.js Y><link rel="modulepreload" href= Yassets/preload-helper-yZmXnH4D.js"/><link rel="modulepreload" href="/assettzvendor-react-B3J8Iwev.js Y><link rel="modulepreload" href= Yassets/debug-build-RBAa-Nd7.js Y><link rel="modulepreload" href= Yassets/i18next-DejKx_b2.js Y><link rel="modulepreload" href= Yassets/context-K1yK5myn.js Y><link rel="modulepreload" href= Yassets/root-BCt4BeVZ.js"/><link rel="modulepreload" href="/assettzuseTranslation-CS4PUfao.js Y><link rel="modulepreload" href= Yassets/index-C6RLGMUu.js Y><link rel="modulepreload" href= Yassets/r_toaster-BPoZycyP.js Y><link rel="modulepreload" href= Yassets/index-BhB8VRbD.js Y><link rel="modulepreload" href= Yassets/index.es-!YguN.js"/><link rel="modulepreload" href="/assettzerrors-DceaYvRD.js Y><link rel="modulepreload" href= Yassets/use_analytics-D8sgGBv9.js Y><link rel="modulepreload" href= Yassets/index-BynegDnP.js Y><link rel="modulepreload" href= Yassets/api.client-CFBWQZ07.js"/><link rel="modulepreload" href="/assettzapp_store-DjK_LPLI.js"/><link rel="modulepreload" href="/assettzuse_recaptcha-Cc-FfdW7.js"/><link rel="modulepreload" href="/assettzsea-C8z6HOhV.js"/><link rel="modulepreload" href="/assettzclsx-WcjABGAv.js Y><link rel="modulepreload" href= Yassets/conditional_render-CMzmxaBN.js"/><link rel="modulepreload" href="/assettztypes-Cz rW2S.js"/><link rel="modulepreload" href="/assettzgraphql.types-C4n-tV-P.js"/><link rel="modulepreload" href="/assettzuser-ceEk52�9�R.js Y><link rel="modulepreload" href= Yassets/use_root_loader_data-BctVHdSw.js"/><link rel="modulepreload" href="/assettz_layout-Cf-5PU.js"/><link rel="modulepreload" href="/assettzannouncement_bar-DQA2YtN2.js Y><link rel="modulepreload" href= Yassets/index-D_ygDdhg.js Y><link rel="modulepreload" href= Yassets/header-DZg-tQIz.js"/><link rel="modulepreload" href="/assettzuse_date_formatter-B8plkLdq.js Y><link rel="modulepreload" href= Yassets/index-BLmSXJV6.js Y><link rel="modulepreload" href= Yassets/index-CYzFksUL.js Y><link rel="modulepreload" href= Yassets/dialog-BLhiYOyD.js"/><link rel="modulepreload" href="/assettzkeyboard-CWKYko85.js Y><link rel="modulepreload" href= Yassets/use-sync-refs-s_ucDfie.js Y><link rel="modulepreload" href= Yassets/portal-BJXRqVbg.js"/><link rel="modulepreload" href="/assettzfocus-management-CBFU9dog.js Y><link rel="modulepreload" href= Yassets/active-element-history-ZzBh6UDK.js"/><link rel="modulepreload" href="/assettzuse-tab-direction-CCujYCdi.js"/><link rel="modulepreload" href="/assettzdescription-QpJIvaQW.js"/><link rel="modulepreload" href="/assettzuse-is-mounted-CWANBLhY.js Y><link rel="modulepreload" href= Yassets/r_form-Bk0Kqfdh.js"/><link rel="modulepreload" href="/assettzr_hidden-DuIgA17P.js Y><link rel="modulepreload" href= Yassets/form-DCb8jNqZ.js"/><link rel="modulepreload" href="/assettzhelpers-95or7ZJs.js"/><link rel="modulepreload" href="/assettz_rollupPluginBabelHelpers-ejGhK6Ps.js"/><link rel="modulepreload" href="/assettzindex-CQHhcL4K.js"/><link rel="modulepreload" href="/assettzindex-CqRXTsqx.js"/><link rel="modulepreload" href="/assettzutils-DOikOPzc.js"/><link rel="modulepreload" href="/assettzuser_image-CeBOtR.js Y><link rel="modulepreload" href= Yassets/index-CQ6l_2cl.js Y><link rel="modulepreload" href= Yassets/use_learner_org_link_data-DfCkKHSb.js Y><link rel="modulepreload" href= Yassets/use_theme_toggle-CE_H9TO5.js"/><link rel="modulepreload" href="/assettzheader_navigation_link_data-GapOpPFB.js"/><link rel="modulepreload" href="/assettzshopping_cart-D4fvdn00.js"/><link rel="modulepreload" href="/assettzsearch_bar-rl4OtB6p.js Y><link rel="modulepreload" href= Yassets/r_button-CFnJySg6.js"/><link rel="modulepreload" href="/assettz_layout-DgIo24NU.js"/><link rel="modulepreload" href="/assettzsubheader-CYsLcMSC.js"/><link rel="modulepreload" href="/assettzroute-B8_6dvt8.js"/><link rel="modulepreload" href="/assettzprerequisite_coupon_hint-dnye5eaJ.js Y><link rel="modulepreload" href= Yassets/banner_write_publish-8-d4V_8d.js"/><link rel="modulepreload" href="/assettzbanner_guarantee_happiness-CTRDiuBw.js Y><link rel="modulepreload" href= Yassets/youtube_subscribe_button-im-iNOIZ.js"/><link rel="modulepreload" href="/assettzmeta_utils-BMIZOm.js Y><link rel="modulepreload" href= Yassets/store_section_container-BWu3Nd_d.js Y><link rel="modulepreload" href= Yassets/book_about_author_podcast-UlljbJtf.js Y><link rel="modulepreload" href= Yassets/book_about_author_social-CgUXVHsz.js"/><link rel="modulepreload" href="/assettzbook_image-BWc0sJb.js Y><link rel="modulepreload" href= Yassets/author_names_with_links-D9C4q8bk.js Y><link rel="modulepreload" href= Yassets/star_rating-Cux4P00007.js Y><link rel="modulepreload" href= Yassets/index-ZgP7zCLR.js Y><link rel="modulepreload" href= Yassets/money-CPhFFnj3.js Y><link rel="modulepreload" href= Yassets/quick_buy_modal-CzQRcKCt.js Y><link rel="modulepreload" href= Yassets/carousel-CRLnMPJj.js"/><link rel="modulepreload" href="/assettzindex-CKK57uRX.js"/><link rel="modulepreload" href="/assettzindex-B8kP7jxn.js"/><link rel="modulepreload" href="/assettzr_text_input-1Vo6fO.js Y><link rel="modulepreload" href= Yassets/cartable_form-DSej9nPv.js Y><link rel="modulepreload" href= Yassets/reload_root_input-DQ6Cq1vQ.js Y><link rel="modulepreload" href= Yassets/index-BcBubsl7.js Y><link rel="modulepreload" href= Yassets/publisher_banner-CmKMRZfy.js"/><link rel="modulepreload" href="/assettzprogress_bar-B3Exkjp9.js Y><link rel="modulepreload" href= Yassets/teaser-D-HS-7fM.js"/><link rel="modulepreload" href="/assettzindex-DKZAlW.js"/><link rel="modulepreload" href="/assettztestimonial-CtlNYElQ.js"/><link rel="modulepreload" href="/assettzbundle_image-DGh2HuN7.js Y><link rel="modulepreload" href= Yassets/useFocusRing-DLszTsiG.js"/><link rel="modulepreload" href="/assettzuseHover-BkP0e4Tb.js Y><link rel="modulepreload" href= Yassets/use-resolve-button-type-BRujWME3.js Y><link rel="modulepreload" href= Yassets/floating-D_SlCCNh.js"/><link rel="modulepreload" href="/assettzfloating-ui.react-dom-jsQ93tLQ.js"/><link rel="modulepreload" href="/assettzbugs-B2zwreem.js Y><link rel="modulepreload" href= Yassets/rta-4qIh83VX.js Y><link rel="modulepreload" href= Yassets/index-BlsX5TBN.js Y><link rel="modulepreload" href= Yassets/index-B1c5o2CB.js Y><link rel="modulepreload" href= Yassets/index-DtRPdiJg.js Y><link rel="modulepreload" href= Yassets/index-DxSFv-NP.js Y><link rel="modulepreload" href= Yassets/index-BicYPJ4-.js Y><link rel="modulepreload" href= Yassets/index-BmO5zxpp.js Y><link rel="modulepreload" href= Yassets/vendor-motion-B9OfaLrX.js Y><link rel="modulepreload" href= Yassets/author_names-DePDOYM5.js"/><link rel="modulepreload" href="/assettztabs-BYl-_-Ox.js Y><link rel="modulepreload" href= Yassets/r_error_alert-BgKOgNqC.js Y><link rel="modulepreload" href= Yassets/index-DCC4lL-9.js Y><link rel="modulepreload" href= Yassets/index-Dm9vvw6c.js Y><link rel="modulepreload" href= Yassets/label-CtB cml.js Y><link rel="modulepreload" href= Yassets/field-CgiHUqkM.js Y><link rel="modulepreload" href= Yassets/index-DiVO5xIa.js Y><link rel="modulepreload" href= Yassets/index-Df0F7FJa.js Y><link rel="modulepreload" href= Yassets/r_submit-FfjQCKsM.js"/><link rel="modulepreload" href="/assettzrc_form-BG7yKDsT.js"/><link rel="modulepreload" href="/assettzhooks-DZvy3X8d.js"/><link rel="modulepreload" href="/assettzsubmission-DOi_XAM6.js Y><link rel="modulepreload" href= Yassets/parse-BdlrwU-l.js Y><link rel="modulepreload" href= Yassets/_rollupPluginBabelHelpers-CVXsq0uU.js Y><link rel="modulepreload" href= Yassets/index-v9McmyDd.js Y><link rel="modulepreload" href= Yassets/index-C-YLiH5Y.js Y><script>window.__reactRouterContext = {"basename":"."."+"+"future":{"unstable_optimizeDeps":false+"+"v8_passThroughRequests":false,"v8_trailingSlashAwareDataRequests":false,"unstable_previewServerPrerendering":false+"+"v8_middleware":true,"v8_splitRouteModules":false+"+"v8_viteEnvironmentApi":falseV�"routeDiscovery":{"mode":"lazy","manifestPath":"/__manifest"V�"ssr":true+"+"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());_script><script type="module" async="">; import * as route0 from Yassets/root-BCt4BeVZ.js"; import * as rout from Yassets/_layout-Cf-5PUp1.js"; impor4�* as route2 from "/assettz_layout-DgIo24NU.js"; import * as rout1�3�p from Yassets/route-B8_6dvt8.js"; � window.__reactRouterManifes4�= { "entry": { � "module": "/assettzentry.client-DiQhepnZ.js", � "imports":  < Yassets/preload-helper-yZmXnH4D.js", Yassets/vendor-react-000J8Iwev.js", Yassets/debug-build-RBAa-Nd7.js", � "/assettz8next-DejKx_.js", Yassets/context-K1yK5myn.js" ], � "css": [] � }, "routes": { "root": { "id": "root", "path": "", "hasAction": false, "hasLoader": true, � "hasClientAction": false, � "hasClientLoader": true, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": Yassets/root-BCt4BeVZ.js", "imports": [ � "/assettzpreload-helper-yZmXnH4D.js", � "/assettzvendor-react-B3J8Iwev.js", � "/assettzdebug-build-RBAa-Nd7.js", Yassets/i18next-DejKx_b2.js", � "/assettzcontext-yK5myn.js", Yassets/useTranslation-CS4PUfao.js", Yassets/index-C6RLGMUu.js", � "/assettzr_toaster-BPoZycyP.js", Yassets/index-BhB8VRbD.js", � "/assettzindex.es-D1Ygt2uN.js", � "/assettzerrors-DceaYvRD.js", � "/assettzuse_analytics-D8sgGBv9.js", Yassets/index-BynegDnP.js", � "/assettzapi.client-CFBWQZ07.js", � "/assettzapp_store-DjK_LPLI.js", Yassets/use_recaptcha-Cc-FfdW7.js", � "/assettzsea-C8z6HOhV.js", Yassets/clsx-WcjABGAv.js", Yassets/conditional_render-CMzmxaBN.js", Yassets/types-CzF1r2�7�S.js", � "/assettzgraphql.types-C4n-tV-P.js", Yassets/user-ceEk5Y2R.js", Yassets/use_root_loader_data-BctVHdSw.js" � ], "css": [ � "/assettzroot-DvsH-ZOt.css" � ] � }, "routetz_store8\_layout": { "id": "routetz_store8\_layout", "parentId": "root", "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": Yassets/_layout-Cf-5PUp1.js", � "imports":  < Yassets/vendor-react-000J8Iwev.js", Yassets/announcement_bar-DQ(�O)�YtN2.js", Yassets/index-D_ygDdhg.js", � "/assettzheader-DZg-tQIz.js", � "/assettzerrors-DceaYvRD.js", � "/assettzindex-BhB8VRbD.js", Yassets/index.es-!YguN.js", Yassets/use_root_loader_data-BctVHdSw.js", Yassets/app_store-DjK_LPLI.js", � "/assettzuse_date_formatter-B8plkLdq.js", � "/assettzindex-BynegDnP.js", Yassets/useTranslation-CS4PUfao.js", Yassets/context-K1yK5myn.js", � "/assettzindex-BLmSXJV6.js", Yassets/clsx-WcjABGAv.js", Yassets/index-CYzFksUL.js", � "/assettzindex-C6RLGMUu.js", Yassets/dialog-BLhiYOyD.js", Yassets/keyboard-CWKYko85.js", Yassets/use-sync-refs-s_ucDfie.js", � "/assettzportal-BJXRqVbg.js", � "/assettzfocus-management-CBFU9dog.js", � "/assettzactive-element-history-ZzBh6UDK.js", � "/assettzuse-tab-direction-CCujYCdi.js", Yassets/description-QpJIvaQW.js", � "/assettzuse-is-mounted-CWANBLhY.js", � "/assettzr_form-Bk0Kqfdh.js", � "/assettzr_toaster-BPoZycyP.js", Yassets/r_hidden-DuIg7P.js", Yassets/form-DCb8jNqZ.js", Yassets/helpers-95or7ZJs.js", � "/assettz_rollupPluginBabelHelpers-ejGhK6Ps.js", Yassets/index-CQHhcL4K.js", � "/assettzindex-CqRXTsqx.js", Yassets/utils-DOikOPzc.js", � "/assettzuser_image-CeBOtR.js", � "/assettzindex-CQ6l3�5�cl.js", Yassets/use_learner_org_link_data-DfCkKHSb.js", � "/assettzuse_theme_toggle-CE_H9TO5.js", � "/assettzuser-ceEk52�9�R.js", � "/assettzheader_navigation_link_data-GapOpPFB.js", Yassets/conditional_render-CMzmxaBN.js", Yassets/shopping_cart-D4fvdn03.js", � "/assettzsearch_bar-rl4OtB6p.js", � "/assettzr_button-CFnJySg6.js", � "/assettzdebug-build-RBAa-Nd7.js" � ], "css": [] V� � "routes/_store+/_readers+/_layout": { � "id": "routes/_store+/_readers+/_layout", � "parentId": "routes/_store+/_layout", � "hasAction": false, � "hasLoader": false, � "hasClientAction": false, � "hasClientLoader": false, � "hasClientMiddleware": false, � "hasDefaultExport": true, � "hasErrorBoundary": true, � "module": "/assettz_layout-DgIo24NU.js", "imports": [ � "/assettzvendor-react-B3J8Iwev.js", � "/assettzsubheader-CYsLcMSC.js", Yassets/header_navigation_link_data-GapOpPFB.js", � "/assettzerrors-DceaYvRD.js", � "/assettzclsx-WcjABGAv.js", � "/assettzindex-CqRXTsqx.js", Yassets/index-CQHhcL4K.js", � "/assettzindex-C6RLGMUu.js", Yassets/utils-DOikOPzc.js", � "/assettzuseTranslation-CS4PUfao.js", � "/assettzcontext-yK5myn.js", Yassets/debug-build-RBAa-Nd7.js", � "/assettzconditional_render-CMzmxaBN.js" ], � "css": [] � }, "routetz_store8\_readers8\$sluuroute": { "id": "routetz_store8\_readers8\$sluuroute", "parentId": "routetz_store8\_readers8\_layout", "path": ":slug", � "hasAction": true, "hasLoader": true, � "hasClientAction": false, � "hasClientLoader": true, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": Yassets/route-B8_6dvt8.js", � "imports":  < Yassets/vendor-react-000J8Iwev.js", Yassets/prerequisite_coupon_hint-dnye5eaJ.js", Yassets/banner_write_publish-8-d4V_8d.js", Yassets/banner_guarantee_happiness-CTRDiuBw.js", Yassets/youtube_subscribe_button-im-iNOIZ.js", Yassets/errors-DceaYvRD.js", Yassets/use_analytics-D8sgGBv9.js", � "/assettzapi.client-CFBWQZ07.js", � "/assettzmeta_utils-BMIZOm.js", � "/assettzsea-C8z6HOhV.js", Yassets/index-BhB8VRbD.js", � "/assettzindex.es-D1Ygt2uN.js", � "/assettzr_button-CFnJySg6.js", � "/assettzindex-CQHhcL4K.js", Yassets/index-CqRXTsqx.js", � "/assettzstore_section_container-BWo�V�Nd_d.js", Yassets/conditional_render-CMzmxaBN.js", Yassets/user_image-00001eBOtR.js", Yassets/book_about_author_podcast-UlljbJtf.js", � "/assettzbook_about_author_social-CgUXVHsz.js", � "/assettzbook_image-BWc0sJb.js", � "/assettzauthor_names_with_links-D9C4q8bk.js", Yassets/index-CQ6l_2cl.js", � "/assettzstar_rating-Cux4PQ37.js", Yassets/index-ZgP7zCLR.js", � "/assettzclsx-WcjABGAv.js", � "/assettzmoney-CPhFFn1�8�p.js", Yassets/quick_buy_modal-CzQRcKCt.js", � "/assettzindex-BLmSXJV6.js", Yassets/carousel-CRLnMPJj.js", Yassets/index-CKK57uRX.js", � "/assettzr_hidden-DuIgA17P.js", � "/assettzform-DCb8jNqZ.js", � "/assettzindex-B8kP7jxn.js", Yassets/r_text_input-1Vob26fO.js", Yassets/cartable_form-DSej9nPv.js", � "/assettzreload_root_input-DQ6CvQ.js", Yassets/index-BcBubsl7.js", � "/assettzuseTranslation-CS4PUfao.js", � "/assettzpublisher_banner-CmKMRZfy.js", � "/assettzprogress_bar-B3Exkjp9.js", � "/assettzteaser-D-HS-7fM.js", � "/assettzindex-DKZAlW.js", Yassets/testimonial-CtlNYElQ.js", � "/assettzindex-C6RLGMUu.js", Yassets/bundle_image-DG HuN7.js", Yassets/types-CzF1r2�7�S.js", � "/assettzuseFocusRing-DLszTsiG.js", � "/assettzuseHover-BkP0e4Tb.js", � "/assettzuse-resolve-button-type-BRujWM000.js", Yassets/keyboard-CWKYko85.js", Yassets/use-sync-refs-s_ucDfie.js", � "/assettzfloating-D_SlCCNh.js", � "/assettzfloating-ui.react-dom-jsQ93tLQ.js", Yassets/portal-BJXRqVbg.js", Yassets/focus-management-CBFU9dog.js", Yassets/use-tab-direction-CCujYCdi.js", � "/assettzbugs-B2zwreem.js", � "/assettzpreload-helper-yZmXnH4D.js", � "/assettzrta-4qIh000VX.js", Yassets/debug-build-RBAa-Nd7.js", � "/assettzgraphql.types-C4n-tV-P.js", Yassets/user-ceEk5Y2R.js", Yassets/index-BynegDnP.js", � "/assettzuse_root_loader_data-BctVHdSw.js", � "/assettzutils-DOikOPzc.js", Yassets/context-K1yK5myn.js", � "/assettzindex-BlsX5TBN.js", Yassets/index-B1c5o2CB.js", � "/assettzindex-DtRPdiJg.js", Yassets/index-DxSFv-NP.js", � "/assettzindex-BicYPJ4-.js", Yassets/index-BmO5zxpp.js", � "/assettzdescription-QpJIvaQW.js", Yassets/dialog-BLhiYOyD.js", Yassets/active-element-history-ZzBh6UDK.js", Yassets/use-is-mounted-CWANBLhY.js", Yassets/vendor-motion-B9OfaLrX.js", � "/assettzauthor_names-DePDOYM5.js", � "/assettzshopping_cart-D4fvdn00.js", Yassets/tabs-BYl-_-Ox.js", Yassets/helpers-95or7ZJs.js", � "/assettz_rollupPluginBabelHelpers-ejGhK6Ps.js", Yassets/r_error_alert-BgKOgNqC.js", � "/assettzindex-DCC4lL-9.js", Yassets/index-Dm9vvw6c.js", � "/assettzlabel-CtBg2cml.js", Yassets/field-CgiHUqkM.js", � "/assettzindex-DiVO5xIa.js", Yassets/index-Df0F7FJa.js", � "/assettzr_submit-FfjQCKsM.js", � "/assettzrc_form-BG7yKDsT.js", Yassets/use_recaptcha-Cc-FfdW7.js", � "/assettzr_form-Bk0Kqfdh.js", � "/assettzr_toaster-BPoZycyP.js", Yassets/hooks-DZvd�m�3�X8d.js", � "/assettzsubmission-DOi_XAM6.js", � "/assettzparse-BdlrwU-l.js", Yassets/_rollupPluginBabelHelpers-CVXsq0uU.js", � "/assettzuse_date_formatter-B8plkLdq.js", � "/assettzindex-v9McmyDd.js", Yassets/index-C-YLiH5Y.js" ], � "css": [] � }, "routetz_store8\_readers8\_index/route": { � "id": "routes/_store+/_readers+/_inde6route", "parentId": "routetz_store8\_readers8\_layout", "index": true, � "hasAction": false, � "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": Yassets/route-ClduH000u.js", � "imports":  < Yassets/vendor-react-000J8Iwev.js", Yassets/index-mW0pu-Nv.js", � "/assettzevent_banner-8byK0fz8.js", � "/assettztestimonials-Dena-Avw.js", � "/assettzerrors-DceaYvRD.js", � "/assettzproduct_bestseller_list-7p6WWH.js", Yassets/user-ceEk5Y2R.js", Yassets/index-CQHhcL4K.js", � "/assettzindex-CqRXTsqx.js", Yassets/book_image-BWc60sJb.js", Yassets/api.client-CFBWQZ07.js", Yassets/r_button-CFnJySg6.js", Yassets/index-C6RLGMUu.js", � "/assettzclsx-WcjABGAv.js", � "/assettzconditional_render-CMzmxaBN.js", � "/assettztestimonial-CtlNYElQ.js", Yassets/user_image-00001eBOtR.js", Yassets/index-CQ6l_2cl.js", � "/assettzmoney-CPhFFn1�8�p.js", Yassets/vendor-motion-B9OfaLrX.js", � "/assettzapp_store-DjK_LPLI.js", Yassets/useTranslation-CS4PUfao.js", Yassets/context-K1yK5myn.js", � "/assettzcontainer-BAgR0B2k.js", Yassets/debug-build-RBAa-Nd7.js", � "/assettzcarousel-CRLnMPJj.js", � "/assettzindex-BhB8VRbD.js", Yassets/index.es-!YguN.js", Yassets/recommendation_cart_button-CGLeyEqA.js", Yassets/quick_buy_modal-CzQRcKCt.js", � "/assettzindex-BmO5zxpp.js", Yassets/description-QpJIvaQW.js", � "/assettzuse-sync-refs-s_ucDfie.js", Yassets/dialog-BLhiYOyD.js", Yassets/keyboard-CWKYko85.js", Yassets/portal-BJXRqVbg.js", Yassets/focus-management-CBFU9dog.js", Yassets/active-element-history-ZzBh6UDK.js", Yassets/use-tab-direction-CCujYCdi.js", � "/assettzuse-is-mounted-CWANBLhY.js", � "/assettzcartable_form-DSej9nPv.js", Yassets/r_hidden-DuIg7P.js", Yassets/form-DCb8jNqZ.js", Yassets/helpers-95or7ZJs.js", � "/assettz_rollupPluginBabelHelpers-ejGhK6Ps.js", Yassets/index-BlsX5TBN.js", � "/assettzindex-c5CB.js", Yassets/index-DiVO5xIa.js", � "/assettzindex-BicYPJ4-.js", Yassets/index-DxSFv-NP.js", � "/assettzindex-Df0F7FJa.js", Yassets/index-ZgP7zCLR.js", � "/assettzindex-DtRPdiJg.js", Yassets/floating-ui.react-dom-jsQ000tLQ.js", � "/assettzindex-BynegDnP.js", Yassets/reload_root_input-DQ6Cq1vQ.js", � "/assettzr_submit-FfjQCKsM.js", � "/assettzrc_form-BG7yKDsT.js", Yassets/r_error_alert-BgKOgNqC.js", � "/assettzindex-BcBubsl7.js", Yassets/use_recaptcha-Cc-FfdW7.js", � "/assettzr_form-Bk0Kqfdh.js", � "/assettzr_toaster-BPoZycyP.js", Yassets/types-CzF1r2�7�S.js", � "/assettzhooks-DZvy3X8d.js", Yassets/submission-DOi_XAM6.js", Yassets/parse-BdlrwU-l.js", � "/assettz_rollupPluginBabelHelpers-CVXsq0uU.js", Yassets/shopping_cart-D4fvdn03.js", � "/assettzuse_root_loader_data-BctVHdSw.js", � "/assettzauthor_names-DePDOYM5.js", � "/assettzprogress_bar-B3Exkjp9.js", � "/assettzindex-v9McmyDd.js", Yassets/index-C-YLiH5Y.js", � "/assettzuse_date_formatter-B8plkLdq.js", � "/assettzstar_rating-Cux4PQ37.js", Yassets/index-DKZA51lW.js", � "/assettzbook_about_author_social-CgUXVHsz.js", � "/assettzindex-BLmSXJV6.js", Yassets/tabs-BYl-_-Ox.js", Yassets/useFocusRing-DLszTsiG.js", Yassets/useHover-BkP0e4Tb.js", Yassets/use-resolve-button-type-BRujWME3.js", � "/assettzavatars_with_names-DA-0V'I.js", � "/assettzbundle_image-DGh2HuN7.js", � "/assettzcourse_image-DqxDoAEN.js", � "/assettzwaveform-0xQ0IJ4h.js", � "/assettztrack_image-DpWx7oWo.js", Yassets/product_list-Cx1MQO.js", Yassets/utils-DOikOPzc.js" ], � "css": [] � } � }, "url": "/assettzmanifest-dfbf608e.js", � "version": "dfbf608e" }; window.__reactRouterRouteModules = {"root":route0,"routetz_store8\_layout":route1,"routetz_store8\_readers8\_layout":route2,"routetz_store8\_readers8\$sluuroute":route3}; import( Yassets/entry.client-DiQhepnZ.js");_script></body>_html><!--$?--><template id="B:."."."></template>--/$--><di6�hidden id="SES"><script>window.__reactRouterContext.streamController.enqueue("[{\"q\"(�|T)�,\"_3\":-5,\"_4\":-5V�\"loaderData\",{\"_5\":6,\"_7\":8},\"actionData\",\"errors\",\"root\",{\"_00005\":-5,\"_562\":-5,\"_563\":564,\"_565\"(�|T)�10,\"_566\":567,\"_568\":569,\"_570\":571,\"_5(�]y)�\":500,\"_574\":14,\"_575\":576,\"_577\":578,\"_579\":580},\"routetz_store8\_readers8\$sluuroute\",{\"_9\":10,\"_�\"2,\"q3\":14,\"_15\"6,\"q7\":-5V�\"book\",{\"3�5�0\":50,\"_\":52,\"_53\":54,\"_55\":56,\"3�5�4\":14,\"_57\"4,\"_58\":59,\"_0\"4,\"_61\":(�)�,\"_00000\":64,\"_65\":66,\"_67\":-5,\"_68\":69,\"_70\":-5,\"_71\":(�]y)�,\"_00\":74,\"_75\":76,\"_77\":78,\"_79\":AS,\"_\":82,\"_83\":14,\"_84\"(�|T)�8,\"_85\":28,\"_86\":-5,\"_87\":-5,\"_88\":89,\"3�5�6\":14,\"_27\"(�|T)�8,\"_90\":-5,\"_\"4,\"_92\":14,\"_000\"4,\"_94\":14,\"_95\"(�|T)�8,\"_96\":28,\"_97\":98,\"_99\":38,\"_100\":38,\"_101\":-5,\"_102\":103,\"q04\"05,\"_106\":107,\"q08\"4,\"q09\"4,\"q10\":-5,\"q�\"(�*h)�,\"_�3\":�4,\"q15\"0008,\"q16\"0008,\"q17\"(�|T)�8,\"q18\"19,\"_(�*h)�0\":(�*h)�1,\"q(� g)�\"0008,\"q00000\":-5,\"q24\"25,\"_(�*h)�6\":-5,\"_(�*h)�7\":14,\"_(�*h)�8\":(�*h)�9,\"q30\"(�|T)�8,\"q\"(�>y)�,\"_003\":14,\"_004\":28,\"_005\":28,\"_006\":007,\"q38\"(�|T)�8,\"q39\"(�|T)�8,\"_41\":28,\"_(� T)�\"4,\"q40\"4,\"q\"(� T)�,\"_143\":144,\"q45\"46,\"_147\":-5,\"_148\":-5,\"_45\":46,\"q49\":74,\"q50\",\"_152\":28,\"_153\":74,\"_154\":38,\"_155\":156,\"q57\"58,\"_159\":160,\"7�p9\":40,\"_35\"0006,\"7�p7\":38,\"_18\",\"_162\":14,\"_163\":74,\"_164\":74,\"_165\":74,\"_166\":74,\"_167\":14,\"_168\":14,\"_169\":170,\"q\":-5,\"q(�]y)�\"00,\"_174\":-5,\"_175\":176,\"q77\"78,\"_179\":180,\"q\"2,\"q(�R)�\":-5,\"q000\"84,\"_185\":186,\"q87\":-5,\"q88\"89,\"_190\":191,\"q(�N)�\"000,\"_194\":195,\"q96\"97,\"_198\":199,\"3�5�00\"(�|T)�01,\"_202\":28V�\"currentSelectedPackage\",{\"q8\":19,\"_20\"(�|T)�1,\"3�5�2\":00000,\"_24\"4,\"3�5�5\":-5,\"_26\"4,\"3�5�7\":28,\"_29\"0000,\"7�p1\":(�>y)�,\"_0000\"0004,\"7�p5\":36,\"_37\"0008,\"7�p9\":40,\"_\"(�|T)�8,\"_42\":14,\"_00000\":44,\"_45\":46,\"_47\":48,\"_49\":28V�\"isOwner\",false,\"orgMembershipBudgets\",[],\"prerequisiteCoupon\",\"type\",\"StoreProductVariant\",\"id\",\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdFZhcmlhbnQvNjc1OTA\",\"variantId\",675DS,\"allowFreePurchases\",\"description\",\"freePurchaseOnly\",\"freePurchaseRequiresMembership\",true,\"maximumPrice\",70,\"minimumPaidPrice\",30,\"name\",\"The Book\",\"ratioOfRevenueToAuthors\",1,\"ratioOfRevenueToCauses\",0,\"royaltiesToRevenueRatio\",0.8,\"showWhatAuthorGets\",\"showWhatCauseGets\",\"suggestedPrice\",35,\"title\",\"GIS编程入门\",\"numCredits\",2,\"taxedAsEbook\",\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNjU1MTQ\",\"aboutText\",\"\u000cp\u003e\u003cstrong\u003e图书介绍:\u000ustrong\u003e\u003c/p\u003e\u003cp\u000e \u003c/p\u003e\u003cp\u000e《GIS 编程入门》是一本全面、实践性强的书籍,旨在帮助读者掌握使用开a�Python 包进行地理空间分析。本书适合各个层次的学习者,将地理信息系统(GIS)的复杂性分解为清晰、可操作的步骤,是学生、研究人员、专业人士和自学者掌握空间数据编程的理想选择。\u003c/p\u003e\u003cp\u000e \u003c/p\u003e\u003cp\u000e地理空间数据已成为环境科学、城市规划、公共卫生和商业分析等众多领域的关键要素。随着这类数据的体量和复杂性不断增长,对可访问工具来分析、处理和可视化地理空间数据的需求从未如此迫切。Python 凭借其丰富的库生态系统,成为处理地理空间数据的首选编程语言——然而面对广泛的库和概念,可能会让人感到不知所措。本书提供了从 Python 新手成长为自信的地理空间程序员所需的结构和清晰指导。\u003c/p\u003e\u003cp\u000e \u003c/p\u003e\u003cp\u000e本书的独特之处在于其循序渐进、以实例驱动的方法。从 Python 编程基础技能开始,您将逐步建立理解,进而掌握地理空间分析的高级技术。内容设计为交互式,配有真实世界的数据集和实践练习,让您能够立即应用所学技能。您将完成各种项目,从基础的空间数据操作到构建交互式仪表板和基于云的地理空间应用程序。\u003c/p\u003e\u003cp\u000e \u003c/p\u003e\u003cp\u000e无论您是希望自动化 GIS 工作流程、开发地理空间 Web 应用程序,还是深化空间数据科学技能,本书都将以清晰和自信的方式指导您完成整个过程。\u003c/p\u003e\u003cp\u000e \u003c/p\u003e\u003cp\u000e\u000cstrong\u000e本书适合人群:\u003c/strong\u000e\u000up\u000e\u000cul\u000e\u000cli\u000e\u000cstrong\u000e学生和研究人员:\u000ustrong\u003e在地理学、环境科学、城市规划和数据科学等领域,需要在学习或研究中分析空间数据的人员。\u003c/li\u000e\u000cli\u000e\u000cstrong\u000eGIS 专业人士:\u003c/strong\u000e希望扩展工具包,超越传统桌面 GIS 软件并自动化复杂工作流程的专业人员。\u003c/li\u000e\u000cli\u000e\u000cstrong\u000e数据科学家和分析师:\u000ustrong\u003e处理基于位置的数据,有兴趣将地理空间分析添加到技能集中的人员。\u000uli\u003e\u003cli\u003e\u003cstrong\u003e软件开发人员:\u000ustrong\u003e有兴趣构建处理地理空间数据应用程序的开发人员。\u000uli\u003e\u003cli\u003e\u003cstrong\u003e自学者和转行人员:\u000ustrong\u003e希望进入不断增长的地理空间数据科学领域的积极初学者。\u003c/li\u000e\u000cli\u000e\u000cstrong\u000e政府和行业专业人士:\u000ustrong\u003e需要在日常工作中融入空间分析的人员,从城市规划到公共卫生。\u000uli\u003e\u003c/ul\u000e\u000cp\u003e \u000up\u000e\u000cp\u003e\u003cstrong\u003e您将学到什么:\u000ustrong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e搭建开发环境:\u000ustrong\u003e用于地理空间编程的工具,2�Miniconda、VS Code、Gi4�=�Google Colab。\u000uli\u003e\u003cli\u003e\u003cstrong\u003e核心 Python 编程:\u000ustrong\u003e包括数据类型、控制流、函数、类、文件处理,以及用于数据操作的 NumPy 和 Pandas 等库。\u000uli\u003e\u003cli\u003e\u003cstrong\u003e地理空间编程:\u000ustrong\u003e使用 GeoPandas、Rasterio、Leafma0�=�Geemap 等库进行矢量和栅格数据处理、地理空间分析和创建交互式可视化的实践指导。\u003c/li\u000e\u000cli\u000e\u000cstrong\u000e高级主题:\u003c/strong\u000e使R�s�Google Earth Engine 进行云计算、高光谱数据分析、高性能地理空间分析,以及使用 Apache Sedona 进行分布式计算。\u000uli\u003e\u003c/ul\u000e\u000cp\u003e\u003cstrong\u003e主要特色:\u000ustrong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e清晰易懂的解释和带注释的代码示例。\u000uli\u003e\u003cli\u003e真实世界的真实数据集,确保实用性学习。\u000uli\u003e\u003cli\u003e强化每章概念的实践练习。\u003c/li\u000e\u000cli\u000e常见陷阱和故障排除指导。\u000uli\u003e\u003cli\u003e地理空间编程初级和高级主题的深入覆盖。\u000uli\u003e\u003cli\u003e补充视频教程=�GitHub 存储库,提供额外资源和材料。\u000uli\u003e\u003cli\u003e读完本书后,您将具备应对现实世界地理空间编程挑战的技能。无论您的目标是构建复杂的空间数据应用程序、自动化地理空间工作流程,还是简单地增强分析能力,本书都将给您在 Python GIS 编程领域成功所需的信心。\u003c/li\u000e\u000uul\u003e\u003cp\u000e\u000cstrong\u000e关于作者:\u003c/strong\u000e\u000up\u000e\u000cp\u003e \u000up\u000e\u000cp\u003e吴秋生博士是田纳西大学副教授和亚马逊学者。他的研究专注于地理空间数据科学,重点使用开a�Python 工具和云计算来研究环境变化。他是多个广泛使用的 Python 包的创建者,包括geemap、leafmap和geoai,致力于推进地理空间分析和可视化。吴博士将其深厚的专业知识带入本书,指导您学习和掌握 Python 地理空间编程的过程。\u003c/p\u003e\",\"metaText\",\"从零开始学习Python GIS编程。掌握地理空间分析、交互式制图和云计算,使用GeoPandas、Leafmap、Google Earth Engine等开源工具。适合学生、研究人员和GIS专业人士。\",\"teaserText\",\"\u000cp\u003e用Python释放地理空间数据的力量!这本实践指南专为渴望使用开源工具探索空间分析和交互式制图的初学者和中级用户而设计。您将通过实际案例学习如何处理真实世界的数据,并在Python编程、矢量和栅格分析、网络制图以及云计算方面建立技能。无论您是学生、研究人员、GIS专业人士还是数据科学家,这本书都将为您提供自信应对地理空间挑战的工具。\u000up\u000e\",\"showFullTitleForTranslations\",\"languageCode\",\"zh-Hans\",\"authorsAreEditors\",\"publishedTranslationBundleProducts\",[],\"bundles\",[],\"ccLicenseText\",\"Creative Commons Attribution\",\"ccLicenseImage\",\"ccSlug\",\"by\",\"ccVersion\",\"contactAuthorMethod\",\"email\",\"contactAuthorUrl\",\"\",\"copyrightType\",\"default\",\"coverHero\",{\"3�5�0000\":5V�\"coverHerx\",{\"_000003\":556,\"_557\":558,\"_559\":560},\"createdAt\",\(� N)�(�e)�5-(�*h)�(�(g)�0T:46:09Z\",\"embargo\",\"enabledForums\",\"epubAvailable\",\"externalForumUrl\",\"nativeForum\",\"feedbackDisplay\",\"feedback_page\",\"googleAnalyticsCode\",\"hasEpubSample\",\"hasWebSample\",\"hasPublicWebPage\",\"hasMultiplePackages\",\"hasPdfSample\",\"hasSample\",\"inputFormat\",\"markuaspec\",\"installmentsCompleted\",\"installmentsPlanned\",\"jsonToc\",\"lastPublishedAt\",\(� N)�(�e)�6-04-05T010006:58Z\",\"lastPublishedSyncMode\",\"upload\",\"landingPagePath\",\ Ygispro-zh\",\"leanpubAppAvailable\",\"matureContent\",\"newEdition\",\"pageCount\",5(�yr)�,\"pastEditions\",[],\"pastEditionsCount\",\"pastEditionsReaderCount\",\"pdfAvailable\",\"samplePdfUrl\",\"httpsa_/s3.amazonaws.cowsamples.leanpub.cowgispro-zh-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0(�e)�6X-Amz-Credential=0XBXHW3Q9GGV69BT7E(�R)�(�mQ)�e(�e)�0705%2Fus-east-1%2FA�U�(�mQ)�Faws4_request\u0(�e)�6X-Amz-Date=202607052�4�240Z\u0026X-Amz-Expires=8400\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=(�e)�546ae6502778792c5a�34000000017a4AS672600001f1bba7cbc4dfd865d\",\"sampleEpubUrl\",\"httpsa_/s3.amazonaws.cowsamples.leanpub.cowgispro-zh-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SH(�O)�56\u0026X-Amz-Credential=0XBXH000Q9GGV69BT7E82%2F20260705(�mQ)�Fus-east-1(�mQ)�Fs3%2Faws4_request\u0026X-Amz-Date(�O)�(�e)�0705T(� g)�4810Z\u0(�e)�6X-Amz-Expires=518400\u0(�e)�6X-Amz-SignedHeaders=host\u0(�e)�6X-Amz-Signature=00a1e1ds948d4f1b8b9a2706a46adcaeb8c6439342a3f0007a4c8e58683e7\",\"percentComplete\",\"recentProgress\",\"prePublishMailchimpListId\",\"leanpub\",\"previewGeneratedAt\",\"retired\",\"seoTitle\",\"GIS编程入门 [Leanpub PDeiPad/Kindle]\",\"showAlsoByAuthors\",\"otherBooksFromAuthors\",[378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395],\"showCommunityEditionOnPage\",\"showNumReaders\",\"exceedsMinimumDisplayReaders\",\"totalCopiesSold\",59,\"showPageCount\",\"showReadLink\",\"showWordCount\",\"slug\",\"gispra-zh\",\"state\",\"published\",\"subtitle\",\"开源地理空间工具4�Python 实用指南\",\"suggestedHashtag\",\"suggestedTweet\",\"toc\",\"translations\",[],\"unpublishedSample\",\"vimeoUrl\",\"wordCount\",\"youtubeUrl\",\"6GwMoV4LOiU\",\"launchVideos\",[],\"clips\",[],\"StoreBookProduct\",\"isAiTranslation\",\"communityEditionTeaserText\",\"communityEditionAboutTheBook\",\"communityEditionWhatsIncluded\",\"communityEditionCalloutQuote\",\"courseMaterial\",\"showReviewsSection\",\"featuredReviews\",[],\"reviewAggregate\",\"authors\",3�p49],\"bigTestimonial\",\"categories\",3�p46],\"causes\",[],\"contributors\",[],\"defaultVariant\",\"featuredTestimonial\",\"language\",{\"_0000\"00000000,\"_209\":59,\"_1\":(�>y)�1,\"7�p44\"00045V�\"variants\",[00009],\"pastEdition\",\"primaryAuthor\",{\"3�5�0\":00003,\"7�p3\":00004,\"7�p35\"00036V�\"publisher\",{\"_(�>y)�2\":14,\"_(�>y)�3\":(�>y)�4,\"7�p3\":(�>y)�5,\"q\"25,\"_(�>y)�6\":14,\"_(�>y)�7\":(�>y)�8,\"7�p29\"00030V�\"showReadLinkString\",\"none\",\"teamDiscountVariants\",[],\"teamDiscountVariant\",{\"_20\"(�|T)�1,\"3�5�2\":00000,\"_0000\"0004,\"3�5�4\":14,\"_26\"4,\"3�5�7\":28,\"_\"0002,\"_43\":44,\"_47\":48,\"_49\":28V�\"testimonials\",[],\"translatedFrom\",{\"q\"(�|T)�00,\"_45\"(�|T)�04,\"_150\":205,\"_61\":206,\"q000\"(�|T)�07V�\"showLaunchVideos\",\"gispro\",\"Introduction to GIS Programming\",3�1�00(�4l)�14(�4l)�15(�4l)�16(�4l)�17(�4l)�18(�4l)�19(�4l)�20(�4l)�(�4l)�(� g)�(�4l)�00000],[],{\"7�p3\":208,\"3�5�09\"(�|T)�10,\"_1\":2},\"English\",\"cod\",\"en\",\"code3\",\"eng\",{\"_141\":142,\"_45\":46,\"_183\":6,\"3�5�26\"00017,\"_(� g)�8\":8},{\"q\"00007,\"_45\"00008,\"_(� g)�6\":309,\"3�5�28\"00010,\"_183\":1},{\"q\"(�|T)�98,\"_45\"(�|T)�99,\"_(� g)�6\":300,\"3�5�28\"00001,\"_183\":302},{\"q\"(�|T)�89,\"_45\"(�|T)�DS,\"_(� g)�6\":291,\"3�5�28\"(�|T)�(�N)�,\"_183\":293},{\"q\"(�|T)�AS,\"_45\"(�|T)�,\"_(� g)�6\":282,\"3�5�28\"(�|T)�000,\"_183\":284},{\"q\"(�|T)�,\"_45\"(�|T)�(�]y)�,\"_(� g)�6\":273,\"3�5�28\"(�|T)�74,\"_183\":275},{\"q\"(�|T)�00000,\"_45\"(�|T)�64,\"_(� g)�6\":265,\"3�5�28\"(�|T)�66,\"_183\":267},{\"q\"(�|T)�54,\"_45\"(�|T)�55,\"_(� g)�6\":256,\"3�5�28\"(�|T)�57,\"_183\":258},{\"q\"(�|T)�45,\"_45\"(�|T)�46,\"_(� g)�6\":247,\"3�5�28\"(�|T)�48,\"_183\":249},{\"q\"(�|T)�36,\"_45\"(�|T)�37,\"_(� g)�6\":000008,\"3�5�28\"(�|T)�39,\"_183\":240},{\"q\"(�|T)�24,\"_45\"(�|T)�25,\"_(� g)�6\":(� g)�7,\"3�5�28\"(�|T)�29,\"_183\":000000},\"gispra-cs\",\"Úvod do programování GIS\",\"coverFeatured\",{\"3�5�0000\"(�|T)�35V�\"coverFeaturex\",{\"_000003\":000004},{\"3�5�09\"(�|T)�,\"_1\":000002},\"cs\",\"ces\",\"url\",\"https:]sofvawe08yqg.cloudfront.nezgispro-ctzs_featured2x7566�(�>y)�4\u0(�e)�7566�(�>y)�4\",\"https:]sofvawe08yqg.cloudfront.nezgispro-ctzs_featured7566�(�>y)�4\u0(�e)�7566�(�>y)�4\",\"gispro-it\",\"Introduzione alla Programmazione GIS\",{\"3�5�0000\"(�|T)�44V�{\"_000003\":243},{\"3�5�09\"(�|T)�,\"_1\":242},\"it\",\"ita\",\"https:]sofvawe08yqg.cloudfront.nezgispro-izs_featured2x7548(�yr)�706\u0(�e)�7548(�yr)�706\",\"https:]sofvawe08yqg.cloudfront.nezgispro-izs_featured7548(�yr)�706\u0(�e)�7548(�yr)�706\",\"gispro-ru\",\"Введение в программирование ГИС\",{\"_000003\":253},{\"3�5�0000\"(�|T)�(�yr)�V�{\"_209\":250,\"3�5��\"(�|T)�V�\"ru\",\"rus\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ru/s_featurex?17(�yr)�0000054(�N)�\u002617(�yr)�0000054(�N)�\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ru/s_featured?17(�yr)�0000054(�N)�\u002617(�yr)�0000054(�N)�\",\"gispra-de\",\"Einführung in die GIS-Programmierung\",{\"3�5�0000\"(�|T)�(�)�V�{\"_000003\":261},{\"3�5�09\"(�|T)�59,\"_1\":260},\"de\",\"ger\",\"https:]sofvawe08yqg.cloudfront.nezgispro-d0us_featured2x752417358\u0(�e)�752417358\",\"https:]sofvawe08yqg.cloudfront.nezgispro-d0us_featured752417358\u0(�e)�752417358\",\"gispro-id\",\"Pengantar Pemrograman GIS\",{\"_000003\":270},{\"3�5�0000\"(�|T)�69V�{\"_209\":20,\"_1\":268},\"ind\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-id/s_featurex?17(�yr)�3624\u002617(�yr)�3624\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-id/s_featured?17(�yr)�3624\u002617(�yr)�3624\",\"gispra-pt\",\"Introdução à Programação em SIG\",{\"_000003\":279},{\"3�5�0000\"(�|T)�78V�{\"_209\":276,\"3�5��\"(�|T)�77V�\"pt-PT\",\"por_PT\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-pt/s_featurex?17(�>y)�99(�]y)�\u002617(�>y)�99(�]y)�\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-pt/s_featured?17(�>y)�99(�]y)�\u002617(�>y)�99(�]y)�\",\"gispra-ko\",\"GIS 프로그래밍 입문\",{\"_000003\":288},{\"3�5�0000\"(�|T)�87V�{\"_209\":285,\"3�5��\"(�|T)�86V�\"ko\",\"kor\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ko/s_featurex?17252668\u002617252668\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ko/s_featured?17252668\u002617252668\",\"gispra-fr\",\"Introduction à la programmation SIG\",{\"_000003\":297},{\"3�5�0000\"(�|T)�96V�{\"_209\":294,\"3�5��\"(�|T)�95V�\"fr\",\"fre\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-fr/s_featurex?1725(�>y)�76\u00261725(�>y)�76\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-fr/s_featured?1725(�>y)�76\u00261725(�>y)�76\",\"gispra-ja\",\"GISプログラミング入門\",{\"_000003\":306},{\"3�5�0000\"00005V�{\"_209\":303,\"3�5��\"00004V�\"ja\",\"jpn\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ja/s_featurex?17000000406\u002617000000406\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-ja/s_featured?17000000406\u002617000000406\",\"gispra-es\",\"Introducción a la Programación GIS\",{\"_000003\":5},{\"3�5�0000\"00014V�{\"_209\":2,\"3�5��\"00000V�\"es\",\"spa\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-es/s_featurex?17�8976\u002617�8976\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-es/s_featured?17�8976\u002617�8976\",{\"3�5�09\":59,\"3�5��\"000V�{\"_000003\":(�>y)�0},{\"3�5�0000\"00019V�\"https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_featured2x751000000486\u0(�e)�751000000486\",\"https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_featured751000000486\u0(�e)�751000000486\",\"zho_Hans\",\"coverUploaded\",\"defaultLandingPageBlurb\",\"\u000cp\u003eLeanpub empowers authors to self-publish in-progress ebooks.\u003c/p\u003e\",\"Leanpub\",\"university\",\"cover\",{\"_000003\":00002},\"logo\",{\"_000003\":00001},\"httpsa_/s3.amazonaws.cowpublisherlogos.leanpub.com/logos/1/originavleanpub_logo.png501739DS6\u0(�e)�501739DS6\",\"missing_avatar.jpg\",\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci82OTM5Nw\",\"Qiusheng Wu\",\"user\",{\"7�p37\"00038V�\"username\",\"giswqs\",{\"_18\"9,\"3�5�0\":,\"_(� g)�\"(�|T)�3,\"3�5�4\":14,\"_25\":-5,\"3�5�6\":14,\"_27\"(�|T)�8,\"3�5�9\":30,\"_\"0002,\"7�p3\":34,\"_35\"0006,\"7�p7\":38,\"_39\":40,\"_41\":28,\"_(� T)�\"4,\"_43\":44,\"_141\":9,\"q00000\"44,\"_45\":46,\"7�p40\"0006,\"_47\":48,\"_49\"(�|T)�8,\"7�p\"000(� T)�V�\"quantity\",\"assets\",[],\"Chinese (Simplified)\",\"direction\",\"ltr\",{\"_0000\"00047,\"_141\":348},\"Python\",\"python\",{\"3�5�0\":00003,\"7�p3\":00004,\"7�p50\":-5,\"7�p\"(�|T)�8,\"7�p35\"000(�yr)�V�\"blurb\",\"isPrimary\",{\"_353\":00008,\"7�p54\":74,\"7�p55\"00038,\"_0000\"00034,\"_356\":357,\"7�p58\"00038,\"_00007\":00008,\"7�p59\":74,\"7�p0\"00038,\"_361\":74,\"_362\":-5,\"_363\":-5,\"_364\":-5,\"_365\":366,\"7�p67\"00068,\"_369\":370},\"githubname\",\"instagramname\",\"linkedinname\",\"profileBlurb\",\"\u003cp\u000eDr. Qiusheng Wu is an Associate Professor a4�the University of Tennessee and an Amazon Scholar. His research focuses on geospatial data science, with an emphasis on using open-source Python tools and cloud computing to stud9�environmental change. He is the creator of several widely-used Python packages, including geemap, leafmap, and geoai, and is dedicated to advancing geospatial analysis and visualization. Dr. Wu's work is a cornerstone of the open-source geospatial community, and he brings his dee0�expertise to this book, guiding yo5�through the process of learning and mastering geospatial programming with Python.\u000up\u000e\",\"twittername\",\"facebookUrl\",\"youtubeName\",\"mastodonName\",\"tiktokName\",\"blueskyName\",\"redditName\",\"avatarOriginal\",{\"_000003\":377},\"avatarTiny\",{\"_000003\":376},\"latestPodcastEpisode\",{\"_371\":372,\"7�p00\"00074,\"_141\":375},\"episodeNumber\",\00018\",\"podcastType\",\"frontmatter\",\"qiusheng-wu-03-07(�(g)�5\",\"https:]1�2�p9qdlcrvnra4b.cloudfront.nezavatartz(�N)�(�]y)�/tinQQiusheng_Wu_400px.jpg?1750(�R)�34\",\"httpsa_/d39qdlcrvnra4b.cloudfront.net/avatars/51927r^full/Qiusheng_Wu_400px.jpg750800000461\",{\"_20\":547,\"_45\"(�|T)�04,\"_141\":203,\"3�5�26\":548,\"_(� g)�8\":549,\"q(�]y)�\":550V�{\"_20\":536,\"_45\":537,\"_141\":0008,\"3�5�26\":539,\"_(� g)�8\":540,\"q(�]y)�\":5V�{\"_20\":525,\"_45\":526,\"_141\":(�yr)�7,\"3�5�26\":528,\"_(� g)�8\":(�yr)�9,\"q(�]y)�\":530V�{\"_20\":518,\"_45\"00008,\"_141\":307,\"3�5�26\":519,\"_(� g)�8\":(�yr)�0,\"q(�]y)�\":5V�{\"_20\":5�,\"_45\"(�|T)�DS,\"_141\":289,\"3�5�26\":5(�*h)�,\"_(� g)�8\":3,\"q(�]y)�\":514V�{\"_20\":500,\"_45\":501,\"_141\":502,\"3�5�26\":500,\"_(� g)�8\":504,\"q(�]y)�\":505V�{\"_20\":489,\"_45\":4DS,\"_141\":491,\"3�5�26\":4(�N)�,\"_(� g)�8\":493,\"q(�]y)�\":494V�{\"_20\":478,\"_45\":479,\"_141\":480,\"3�5�26\":4,\"_(� g)�8\":482,\"q(�]y)�\":4000V�{\"_20\":4,\"_45\"(�|T)�64,\"_141\":263,\"3�5�26\":4(�]y)�,\"_(� g)�8\":473,\"q(�]y)�\":474V�{\"_20\":40,\"_45\":4,\"_141\":462,\"3�5�26\":400000,\"_(� g)�8\":464,\"q(�]y)�\":465V�{\"_20\":4000,\"_45\"(�|T)�(�]y)�,\"_141\":271,\"3�5�26\":454,\"_(� g)�8\":455,\"q(�]y)�\":456V�{\"_20\":446,\"_45\"(�|T)�55,\"_141\":254,\"3�5�26\":447,\"_(� g)�8\":448,\"q(�]y)�\":449V�{\"_20\":439,\"_45\"(�|T)�99,\"_141\":298,\"3�5�26\":440,\"_(� g)�8\":441,\"q(�]y)�\":4(� T)�V�{\"_20\":4(�>y)�,\"_45\"(�|T)�,\"_141\":280,\"3�5�26\":40000,\"_(� g)�8\":000004,\"q(�]y)�\":435V�{\"_20\":4,\"_45\":4(� g)�,\"_141\":(� T)�3,\"3�5�26\":424,\"_(� g)�8\":(� T)�5,\"q(�]y)�\":426V�{\"_20\":414,\"_45\"(�|T)�46,\"_141\":245,\"3�5�26\":415,\"_(� g)�8\":6,\"q(�]y)�\":417V�{\"_20\":400,\"_45\":404,\"_141\":405,\"3�5�26\":406,\"_(� g)�8\":407,\"q(�]y)�\":408V�{\"_20\"00096,\"_45\"(�|T)�37,\"_141\":000006,\"3�5�26\"00097,\"_(� g)�8\":398,\"q(�]y)�\"00099V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjYzOTQ\",{\"_000003\":244},{\"3�5�0000\"(�|T)�00000V�[400],{\"_20\":401,\"_0000\"00034,\"_00005\":402},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci83MDM2Mw\",{\"_00007\":00008},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNzU0MTQ\",\"Gestion des données spatiales avec DuckDB\",\"duckdb-fr\",{\"_000003\":3},{\"3�5�0000\":4(�*h)�V�[409],{\"_20\":410,\"_0000\"00034,\"_00005\":1},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci84MDc4Mw\",{\"_00007\":00008},\"httpsa_/d2sofvawe08yqg.cloudfront.net/duckdb-fr/s_featurex?1769277545\u00261769277545\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/duckdb-fr/s_featured?1769277545\u00261769277545\",\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNjU4NDA\",{\"3�5�0000\"(�|T)�000V�{\"_000003\":252},[8],{\"3�5�0\":9,\"7�p3\":00004,\"7�p35\":420V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci(�R)�OTc5Ng\",{\"7�p37\"00038V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNzcxODQ\",\"GeoA!�?�com Python\",\"geoai-pt\",{\"_000003\":000001},{\"3�5�0000\":430V�[427],{\"_20\":428,\"_0000\"00034,\"_00005\":(� T)�9},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci84MjU4Nw\",{\"_00007\":00008},\"httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-pzs_featured2x774724989\u0(�e)�774724989\",\"https:]sofvawe08yqg.cloudfront.nezgeoai-pt/s_featured?1774(�]y)�4989\u00261774(�]y)�4989\",\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNjU1NDg\",{\"3�5�0000\"(�|T)�88V�{\"_000003\":287},[000006],{\"3�5�0\":000007,\"7�p3\":00004,\"7�p35\":438V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci(�R)�OTQzMg\",{\"7�p37\"00038V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjgNDU\",{\"_000003\":306},{\"3�5�0000\"00005V�[400000],{\"_20\":444,\"_0000\"00034,\"_00005\":445},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci82OTQyOQ\",{\"_00007\":00008},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNjU4Mzc\",{\"3�5�0000\"(�|T)�(�)�V�{\"_000003\":261},[450],{\"3�5�0\":451,\"7�p3\":00004,\"7�p35\":4(�yr)�V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci(�R)�OTc5Mw\",{\"7�p37\"00038V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjgNjI\",{\"_000003\":279},{\"3�5�0000\"(�|T)�78V�[457],{\"_20\":458,\"_0000\"00034,\"_00005\":459},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci82OTQ0OQ\",{\"_00007\":00008},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNzcxMjk\",\"GeoAI 与 Python\",\"geoai-zh\",{\"3�5�0000\":470V�{\"_000003\":469},[466],{\"3�5�0\":467,\"7�p3\":00004,\"7�p35\":468V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci84MjUzMQ\",{\"7�p37\"00038V�\"https:]sofvawe08yqg.cloudfront.nezgeoai-zh/s_featurex?1774577410\u00261774577410\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-zvvs_featured7745770\u0(�e)�7745770\",\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjU4Mjc\",{\"_000003\":270},{\"3�5�0000\"(�|T)�69V�[475],{\"_20\":476,\"_0000\"00034,\"_00005\":477},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci82OTc4Mg\",{\"_00007\":00008},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNzcxMzE\",\"GeoAI avec Python\",\"geoai-fr\",{\"_000003\":488},{\"3�5�0000\":487V�[484],{\"_20\":485,\"_0000\"00034,\"_00005\":486},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci84MjUzMw\",{\"_00007\":00008},\"httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-fys_featured2x774577890\u0(�e)�774577890\",\"https:]sofvawe08yqg.cloudfront.nezgeoai-fr/s_featured?17745778DS\u002617745778DS\",\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNzUzODk\",\"Gestión de Datos Espaciales con DuckDB\",\"duckdb-es\",{\"3�5�0000\":499V�{\"_000003\":498},[495],{\"3�5�0\":496,\"7�p3\":00004,\"7�p35\":497V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci84MDuNw\",{\"7�p37\"00038V�\"https:]sofvawe08yqg.cloudfront.nezduckdb-etzs_featured2x76(�N)�00543\u0(�e)�76(�N)�00543\",\"https:]sofvawe08yqg.cloudfront.nezduckdb-etzs_featured76(�N)�00543\u0(�e)�76(�N)�00543\",\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNzcxMjg\",\"GeoA!�?�con Python\",\"geoai-es\",{\"_000003\":0},{\"3�5�0000\":509V�[506],{\"_20\":507,\"_0000\"00034,\"_00005\":508},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci84MjUzMA\",{\"_00007\":00008},\"httpsa_/d2sofvawe08yqg.cloudfront.net/geoai-etzs_featured2x774576767\u0(�e)�774576767\",\"https:]sofvawe08yqg.cloudfront.nezgeoai-es/s_featured?1774576767\u00261774576767\",\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNjU1NDY\",{\"3�5�0000\"(�|T)�97V�{\"_000003\":296},[5],{\"3�5�0\":6,\"7�p3\":00004,\"7�p35\":517V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci(�R)�OTQzMA\",{\"7�p37\"00038V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjgMjY\",{\"_000003\":5},{\"3�5�0000\"00014V�[5(� g)�],{\"_20\":500000,\"_0000\"00034,\"_00005\":(�yr)�4},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci82OTQxMA\",{\"_00007\":00008},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6Qm9va1Byb2R1Y3QvNzcwMzU\",\"GeoAI with Python\",\"geoai\",{\"3�5�0000\":535V�{\"_000003\":0004},[0001],{\"3�5�0\":0002,\"7�p3\":00004,\"7�p35\":50000V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci84MjQzOA\",{\"7�p37\"00038V�\"https:]sofvawe08yqg.cloudfront.nezgeoa}vs_featured2x770000069(� g)�8\u0(�e)�770000069(� g)�8\",\"https:]sofvawe08yqg.cloudfront.nezgeoa}vs_featured770000069(� g)�8\u0(�e)�770000069(� g)�8\",\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjgxMTY\",\"Spatial Data Managemen4�with DuckDB\",\"duckdb\",{\"3�5�0000\":546V�{\"_000003\":545},[542],{\"3�5�0\":543,\"7�p3\":00004,\"7�p35\":544V�\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6UHJvZHVjdE dGhvci000MjQyNA\",{\"7�p37\"00038V�\"https:]sofvawe08yqg.cloudfront.nezduckdb/s_featurex?17(�)��18\u002617(�)��18\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/duckdus_featured76�841\u0(�e)�76�841\",\"3�0�lkOi8vbGVhbnYi9TdG9yZTo6Qm9vsBy81�pQvNjQzOTQ\",{\"_000003\":555},{\"3�5�0000\":554V�[5],{\"_20\":5(�yr)�,\"_0000\"00034,\"_00005\":553},\"Z2lkOi8vbGVhbnB1Yi9TdG9yZTo6UHJvZHVjdEF1dGhvci82ODI2Mw\",{\"_00007\":00008},\"httpsa_/d2sofvawe08yqg.cloudfront.net/gisprws_featured2x750804263\u0(�e)�750804263\",\"https:]sofvawe08yqg.cloudfront.nezgispro/s_featured?1750AS(� T)�00000\u00261750AS(� T)�00000\",\"httpsa_/d2sofvawe08yqg.cloudfront.net/gispra-zh/s_herx?17043486\u002617043486\",\"width\",640,\"height\",AS0,\"https:]sofvawe08yqg.cloudfront.nezgispro-zvvs_hero751000000486\u0(�e)�751000000486\",\"shoppingCartId\",\"shoppingCart\",{\"_20\":5000,\"_594\":38,\"_595\":28,\"_596\":74,\"_597\":598,\"_599\":600,\"_01\":28V�\"locale\",\"readerTheme\",\"light\",\"constants\",{\"_5\":5(�N)�V�\"publishers\",{\"_587\":588,\"_589\":590},\"learnerOrganizations\",[],\"needsLocaleCookieSync\",\"announcements\",{\"_5\":5(�R)�,\"_583\":-5V�\"sentryEnvironment\",\"production\",\"sentryRelease\",\"f5548b0fa7c00e01�1�pddcc40793859fa1�1�p(�*h)�37ca7\",\"announcement_store\",{\"_584\"4,\"_585\":586V�\"announcement_authors\",\"flag\",\"text\",\"\u000cp\u003e\u003ca href=\\\ Yevents/book_kickstart_workshop\\\"\u003eKick off your book project\u003c/a\u003e, \u003ca href=\\\ Yevents/ghostai_workshop\\\"\u000eget started with GhostAI\u000ua\u000e, \u000ca href=\\\"/eventtzbook_marketing_workshop\\\"\u000eget better at marketing\u003c/a\u003e, or spend the day \u000ca href=\\\"/eventtzfull_day\\\"\u003edoing all three\u000ua\u000V�I� Free live workshops on Zoom. Saturday, June(��N)�7,(��N)�(�e)�6.\u003c/p\u003e\\n\",\"companies\",[],\"universities\",[],\"paypalClientId\",\"AX000Cwz8jR6rVVzzZiZNWWXl0dGagi-GZrjG-S3Us4E5nrKMn7DxDQ730O4R8LusLPp49ALn6aRVaEy\",\"na-cart\",\"count\",\"free\",\"updatedAt\",\"paymentGateway\",\"STRIPE\",\"cartItems\",[],\"loading\"]\n");_script><!--$?--><template id="B:1"></template>--/$--></div><script>function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d)if(0===e)break;else e--;else"$T�M�==d&&"$?T�M�==d&&"Z�T�M�==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data="$";a._reactRetry&&a._reactRetry()}};$RC("B:."."."+"+"S:.".".")</script><div hidden id="S:1"><script>window.__reactRouterContext.streamController.close();_script></div><script>$RC("B:1"+"+"S:1")</script><�/�d�i�v�>�<�d�i�v� �c�l�a�s�s�=�"�n�a�k�e�d�_�c�t�r�l�"�>� �<�f�o�r�m� �a�c�t�i�o�n�=�"�/�i�n�d�e�x�.�c�g�i�/�c�o�n�t�r�a�s�t�"� �m�e�t�h�o�d�=�"�g�e�t�"� �n�a�m�e�=�"�g�a�t�e�"�>� �<�p�>�<�a� �h�r�e�f�=�"�h�t�t�p�:�/�/�a�l�t�s�t�y�l�e�.�a�l�f�a�s�a�d�o�.�n�e�t�"�>�A�l�t�S�t�y�l�e�<�/�a�>� �k00c0f0 YcU00_0000 �<�a� �h�r�e�f�=�"�h�t�t�p�s�:�/�/�l�e�a�n�p�u�b�.�c�o�m�/�g�i�s�p�r�o�-�z�h�"�>�(�-�&�g�t�;�00000)�<�/�a�>� �/� �<�l�a�b�e�l�>�0000:� �<�i�n�p�u�t� �t�y�p�e�=�"�t�e�x�t�"� �n�a�m�e�=�"�n�a�k�e�d�_�p�o�s�t�_�u�r�l�"� �v�a�l�u�e�=�"�h�t�t�p�s�:�/�/�l�e�a�n�p�u�b�.�c�o�m�/�g�i�s�p�r�o�-�z�h�"� �s�i�z�e�=�"�2�2�"� �/�>�<�/�l�a�b�e�l�>� �<�l�a�b�e�l�>�000:� �<�s�e�l�e�c�t� �n�a�m�e�=�"�n�a�k�e�d�_�p�o�s�t�_�m�o�d�e�"�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�d�e�f�a�u�l�t�"�>�00000<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�s�p�e�e�c�h�"�>�X0000<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�r�u�b�y�"�>�00NM0<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�c�o�n�t�r�a�s�t�"� �s�e�l�e�c�t�e�d�=�"�s�e�l�e�c�t�e�d�"�>�MrS<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�l�a�r�g�e�r�-�t�e�x�t�"�>�eW[b'Y<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�m�o�b�i�l�e�"�>�0000<�/�o�p�t�i�o�n�>� �<�/�s�e�l�e�c�t�>� �<�i�n�p�u�t� �t�y�p�e�=�"�s�u�b�m�i�t�"� �v�a�l�u�e�=�"�h:y"� �/�>� �<�/�p�>� �<�/�f�o�r�m�>� �<�/�d�i�v�>� � � �